2013-03-12 99 views
4

我的路线是这样定义的如何覆盖rails中的路径助手?

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

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

感谢

+0

这里一样,有谁知道? – juanpastas 2013-05-08 16:55:39

回答

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) 
+0

保存了一天,谢谢!通常应该在'routes.rb'中调整路线,他们的路径助手应该总是指向同一个地方。但有时候你需要url助手来生成路径,而不是'routes.rb'中定义的路径,也就是说,如果你正在为通过ajax调用的Devise操作提供前端外观。 – zrisher 2017-06-22 07:23:07