我在表中有以下<tr>
标记
<% if user.company.nil? %>
<tr class="error">
<% else %>
<tr>
<% end %>
<td><%= user.name %></td>
</tr>
我想添加另一个if语句
<% if user.disabled? %>
<tr class="disabled">
<% end %>
因此,当其中两个语句是true
时,我希望接收:
<tr class="error disabled">
我知道我应该把它转移到helper,但如何为扩展类编写好的case语句取决于这些语句?
def tr_classes(user)
classes = []
classes << "error" if user.company.nil?
classes << "disabled" if user.disabled?
if classes.any?
" class="#{classes.join(" ")}""
end
end
<tr<%= tr_classes(user) %>>
<td><%= user.name %></td>
</tr>
但好的风格是:
def tr_classes(user)
classes = []
classes << "error" if user.company.nil?
classes << "disabled" if user.disabled?
if classes.any? # method return nil unless
classes.join(" ")
end
end
<%= content_tag :tr, :class => tr_classes(user) do -%> # if tr_classes.nil? blank <tr>
<td><%= user.name %></td>
<% end -%>
您可以尝试一种辅助方法,比如
def user_table_row(user)
css = ""
css = "#{css} error" if user.company.nil?
css = "#{css} disabled" if user.disabled?
content_tag :tr, class: css
end
不确定这在表行的情况下效果如何,因为您希望在中嵌套td
更新:这里是产生td代码块的更新版本
def user_table_row(user)
css = # derive css, using string or array join style
options = {}
options[:class] = css if css.length > 0
content_tag :tr, options do
yield
end
end
然后在视图中
<%= user_table_row(user) do %>
<td><%= user.name %></td>
<% end %>