在我的rails应用程序中,我有一个非常动态的用户仪表板,它根据用户角色(客户,员工,管理员)显示和隐藏div元素。
例如:users / show.html.erb
<% if current_user.role_id == 4 %>
<th>Edit</th>
<th>Delete</th>
<% elsif current_user.role_id == 1 %>
<th>Cancel Appointment</th>
<% else %>
<% end %>
</tr>
</thead>
我将表格导航标签存储在他们自己的部分中,如下所示:
<% if current_user.role_id == 1 %>
<%= render 'users/customer_bar' %>
<% elsif current_user.role_id == 2 %>
<%= render 'users/employee_bar' %>
<% elsif current_user.role_id == 4 %>
<%= render 'users/honcho_bar' %>
对于上述标签也可以这样做,但这根本不会是DRY。有没有更好的办法?为什么以这种方式有条件地格式化标签是不好的?
答案 0 :(得分:2)
<强>声明强>
也许您正在寻找case / switch
:
case current_user.role_id
when 4
#do something for 4
when 1
#do something for 1
end
-
<强>系统强>
我强烈建议您使用partial
来实现此功能:
<%= render partial: "your_partial", local: { your_local_var: "value" } %>
这将允许您在部分本身中定义条件:
#app/views/controller/your_partial.html.erb
<% if var == "value" %>
...
<% else %>
...
<% end %>
<强>坏吗
我不会说它为“坏” - 通常情况下你需要条件。我认为,问题是你需要确保能够以最有效的方式处理这些条件。
使用case / switch
是合法的方式,但是,stack