我在索引视图中有一个User对象列表。对于每个用户,我正在显示一个带有link_to调用的名称,用于编辑用户,如下所示:
<% @users.each do |u| %>
<%= link_to u.name, edit_user_path(u) %><br/>
<% end %>
我想根据用户的角色属性(例如员工,经理等)使用不同的编辑路径。我的路线中有edit_employee_path
,edit_manager_path
等。
动态确定link_to
的第二个参数的最佳方法是什么?我可以用一堆丑陋的if / else代码破解它,但我想用最惯用的Rails方式来做。
答案 0 :(得分: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) %>
答案 1 :(得分:2)
您可以使用Helper模块来确定要运行的* _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/>
但是您需要注意始终存在具有相应名称的方法。