【问题标题】:Rails method to return current "controller#action"?Rails 方法返回当前的“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 这听起来像是维护重复的路线列表的痛苦方式
  • 你有重复的路线听起来很痛苦。您有什么理由担心始发路线?

标签: ruby-on-rails ruby


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2016-12-22
      • 2012-02-10
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      相关资源
      最近更新 更多