Ruby on rails 如何覆盖rails路由帮助器方法?
有没有一种方法可以覆盖rails route helper方法,以便它们以不同的方式处理模型实例?我刚刚创建了一个Ruby on rails 如何覆盖rails路由帮助器方法?,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,有没有一种方法可以覆盖rails route helper方法,以便它们以不同的方式处理模型实例?我刚刚创建了一个User模型,该模型不是从ActiveRecord::Base继承的,而是使用我编写的方法从LDAP数据库检索用户。但是,现在所有的route helper方法都混乱了。(例如,user\u path(user)给出的是/users/\code>而不是/users/002131) 我尝试用以下代码覆盖该方法(放在用户模型中),但它似乎没有做任何事情。有什么想法吗 class <
User
模型,该模型不是从ActiveRecord::Base
继承的,而是使用我编写的方法从LDAP数据库检索用户。但是,现在所有的route helper方法都混乱了。(例如,user\u path(user)
给出的是/users/\code>而不是/users/002131
)
我尝试用以下代码覆盖该方法(放在用户
模型中),但它似乎没有做任何事情。有什么想法吗
class << Rails.application.routes.url_helpers
def user_path(user)
if user.class == User
users_path + "/#{user.id}"
else
users_path + "/#{user}"
end
end
end
class在您的模型上实现一个to_param
方法,当您将该方法传递给route helper时,它应该调用该方法
例如:大多数情况下,您是通过模型ID进行路由的,因此
user_path(some_user)
生成类似于/users/45
但假设您有一个唯一的用户名,您希望在路由中使用该用户名,那么您只需执行以下操作:
class User
def to_param
username
end
end
然后,对user\u path(user)
的调用将生成如下内容:/users/blackbear
在模型上实现to\u param
方法,当您将该方法传递给route helper时,它应该调用该方法
例如:大多数情况下,您是通过模型ID进行路由的,因此
user_path(some_user)
生成类似于/users/45
但假设您有一个唯一的用户名,您希望在路由中使用该用户名,那么您只需执行以下操作:
class User
def to_param
username
end
end
然后对user\u path(user)
的调用将生成如下内容:/users/blackbear
完美!我希望有一种方法可以做到这一点。谢谢你的帮助。你知道有没有类似的方法可以使用link_to helper方法?这些似乎不受to_param的影响。当然,我可以将它们设置为指向user\u path(user)
,而不仅仅是user
,但如果有一种简单的方法可以让link\u正常工作,那就太好了。太好了!我希望有一种方法可以做到这一点。谢谢你的帮助。你知道有没有类似的方法可以使用link_to helper方法?这些似乎不受to_param的影响。当然,我可以将它们设置为指向user\u path(user)
,而不仅仅是user
,但如果有一种简单的方法可以让link\u正常工作,那就太好了。