有没有办法覆盖rails路由助手方法,以便它们以不同方式处理模型实例?我刚刚创建了一个不从User
继承的ActiveRecord::Base
模型,而是使用我编写的方法从LDAP数据库中检索用户。但是,现在所有的路径助手方法都搞砸了。 (例如,user_path(user)
提供/users/#<User:0x3df82a0>
而不是/users/002131
)
我尝试使用以下代码覆盖该方法(放在User
模型中),但它似乎没有做任何事情。有什么想法吗?
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
答案 0 :(得分:4)
在您的模型上实现to_param
方法,当您将其传递给路径助手时,它应该调用该方法。
一个例子:大多数时候您按照模型ID路由,所以像
这样的调用user_path(some_user)
生成类似/users/45
但是我们假设你有一个你想在路线中使用的唯一用户名,所以你只会这样做:
class User
def to_param
username
end
end
然后拨打user_path(user)
会产生类似:/users/blackbear