视图内的条件<div>标签。为什么不好?</div>

时间:2014-07-22 05:27:19

标签: ruby-on-rails dry

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

1 个答案:

答案 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

可能会有一个问题