1

我在索引视图中有一个用户对象列表。对于每个用户,我会显示一个带有 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 方式来做。

4

2 回答 2

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) %>
于 2013-04-02T18:43:35.293 回答
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/>

但是您需要注意始终存在具有适当名称的方法。

于 2013-04-02T18:43:46.010 回答