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_nameaction_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”?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 返回 json

在rails mailer上调用deliver_later之前存储当前的可选路由范围

Rails - 在控制器中路由动作的正确方法

如何直接从 Rails 控制器返回 HTML?

Rails中使用图表(ChartJs)显示数据

rails程序文件名命名规范