Rails 方法返回当前的“controller#action”?
Posted
技术标签:
【中文标题】Rails 方法返回当前的“controller#action”?【英文标题】:Rails method to return current "controller#action"? 【发布时间】:2017-08-26 06:38:45 【问题描述】:除了检查if controller_name == 'foo' && action_name == 'bar'
,是否有Rails 方法以您在routes.rb 文件(get '/buzz' => 'foo#bar'
) 中定义它们的相同格式返回两者?
是否有类似get_current_route()
的东西会返回"foo#bar"
?
【问题讨论】:
这种格式对于路由系统来说非常独特,并没有在其他地方使用,即使这样,它也只是两个稍长选项的简写。这里的用例是什么? 避免这种情况:if (controller_name == 'foo' && action_name == 'bar') || (controller_name == 'foo2' && action_name == 'bar2')
做一个查找表:MAGIC_ROUTES = [ %w[ foo bar ], %w[ foo2 bar2 ] ]
然后MAGIC_ROUTES.include?([ params[:controller], params[:action] ])
@tadman 这听起来像是维护重复的路线列表的痛苦方式
你有重复的路线听起来很痛苦。您有什么理由担心始发路线?
【参考方案1】:
您可以使用controller_name
和action_name
方法获取当前控制器和操作的名称。因此,您可以连接字符串以获得所需的结果。
您还可以从 params 哈希中获取这些值,这样做被认为是一种不好的做法。
params 哈希将始终包含 :controller 和 :action 键, 但是您应该改用方法 controller_name 和 action_name 访问这些值
ActionController Parameters
参考链接:
Rails - controller action name to string
Can I get the name of the current controller in the view?
【讨论】:
【参考方案2】:我不知道。
但你总是可以自己写,然后把它贴在方便的地方:
例如:
module ApplicationHelper
def get_current_route
"#params[:controller]##params[:action]"
end
end
【讨论】:
以上是关于Rails 方法返回当前的“controller#action”?的主要内容,如果未能解决你的问题,请参考以下文章