【问题标题】:How to override routes path helper in rails?如何覆盖rails中的路由路径助手?
【发布时间】:2013-02-27 13:26:58
【问题描述】:

我的路线是这样定义的

match '/user/:id' => 'user#show', :as => :user

如果由于某种原因传递了 nil ID,我希望路由助手只返回“#”,如果 ID 不是 nil,我希望它返回像“/user/123”这样的正常路径。 或者有没有更好的方法来做到这一点。 这个路由助手已经在我的代码中的很多地方使用过,所以我不想改变它。相反,我正在寻找一个会影响 user_path 的所有实例的地方。

谢谢

【问题讨论】:

  • 这里也一样,有人知道吗?

标签: ruby-on-rails ruby-on-rails-3.2 routes


【解决方案1】:

我是在 app/helpers/url_helper.rb 做的

module UrlHelper
  def resource_path(resource, parameters = {})
    # my implementation
    "/#{resource.category}/#{resource.name}#{ "?#{parameters.to_query}" if parameters.present? }"
  end
end

我知道有一些方法可以定义这样的嵌套路由,但正如问题所述,我有一个代码库在多个部分中使用该路由。

我尝试为旧方法设置别名,但未被识别:

alias_method :old_resource_path, :resource_path

【讨论】:

    【解决方案2】:
    module CustomUrlHelper
      def user_path(user, options = {})
        if user.nil?
          "#"
        else
          super
        end
      end
    end
    
    # Works at Rails 4.2.6, for older versions try http://stackoverflow.com/a/31957323/474597
    Rails.application.routes.named_routes.url_helpers_module.send(:include, CustomUrlHelper)
    

    【讨论】:

    • 节省了一天,谢谢!通常应该调整routes.rb 中的路线,并且它们的路径助手应该始终指向同一个地方。但有时您希望 url 帮助程序生成 routes.rb 中定义的路径以外的路径,即,如果您为通过 ajax 调用的设计操作提供前端外观。
    猜你喜欢
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多