在我的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。有没有更好的办法?为什么以这种方式有条件地格式化标签是不好的?
语句
也许你正在寻找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