<div> 视图中的条件标记。为什么不好?



在我的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

上面遇到问题。

最新更新