2013-04-02 120 views
1

我有一個索引視圖中的User對象列表。對於每一個用戶,我用的link_to調用顯示名稱編輯用戶,像這樣:Rails - link_to基於對象值的路徑

<% @users.each do |u| %> 
    <%= link_to u.name, edit_user_path(u) %><br/> 
<% end %> 

我想使用基於用戶的角色屬性(例如員工,經理等),不同的編輯路徑。我的路線中有edit_employee_pathedit_manager_path等。

什麼是動態確定第二個參數爲link_to的最佳方法?我可以用一堆醜陋的if/else代碼破解它,但我想用最習慣的Rails方式來做。

+0

什麼是您的控制器和您想要進行路由的操作? –

回答

2

你可以使用一個輔助模塊確定要運行的* _path方法。例如:

module UsersHelper 
    def edit_url(user) 
    case user.role 
    when :employee 
     employee_edit_path(user) 
    when :manager 
     manager_edit_path(user) 
    else 
     edit_user_path(user) 
    end 
    end 
end 

如果你的路徑方法在一個非常一致的命名方式,你也許能夠調用動態構建的方法,如:

<%= link_to u.name, send(:"#{u.role}_user_edit_path", u) %><br/> 

但你需要小心使用適當名稱的方法始終存在。

+1

我不知道你需要多麼「小心」;驗證應該防止您的角色永遠包含路徑幫助程序不支持的值。我想這很謹慎。 – meagar

+0

是的,我想驗證開始可能被認爲是「謹慎」在這裏 –

+0

正是我需要斯圖爾特M.謝謝! – andrunix

5

怎麼樣一個輔助方法

你可能是 users_helper或您選擇

def edit_path_by_type(user) 
    user.role == "Employee" ? edit_employee_path(user) : edit_manager_path(user) 
end 

的任何其他幫助,並在您的視圖

<%= link_to u.name, edit_path_by_type(u) %> 
+0

謝謝阿比德。這非常有幫助。 – andrunix