2012-07-20 38 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