2012-07-20 56 views
2

有没有办法重写rails路线帮助器方法,以便他们处理模型实例的方式不同?我刚完成创建User模型,该模型不从ActiveRecord::Base继承,而是使用我编写的方法从LDAP数据库检索用户。但是,现在所有的路线帮助方法都搞砸了。 (例如,user_path(user)给人/users/#<User:0x3df82a0>,而不是/users/002131我如何重写rails路由帮助器方法?

我试图重写用下面的代码(放在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 

回答

4

实现你的模型to_param方法,当你传递的路线助手应该调用该方法。

一个例子:大部分的时候你通过模型ID路线,所以像

user_path(some_user) 

调用生成像/users/45

一个URL,但可以说你有,你想要一个唯一的用户名在路由使用,所以你只是做:

class User 
    def to_param 
    username 
    end 
end 

然后user_path(user)的调用将产生类似:/users/blackbear

+0

完美!我希望可能有办法做这样的事情。谢谢你的帮助。 – Ajedi32 2012-07-20 19:18:16

+1

你会碰巧知道是否有办法做一些类似的link_to辅助方法?这些似乎不受to_param影响。当然,我可以将它们设置为指向'user_path(user)'而不是'user',但如果有一个简单的方法来使link_to正常工作,那将会很好。 – Ajedi32 2012-07-20 19:40:12