我的表格中有<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">
我知道我应该把它移到帮手那么如何为扩展类编写好的案例陈述取决于这些陈述?
答案 0 :(得分:2)
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 -%>
答案 1 :(得分:0)
您可以尝试一种辅助方法,例如
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
UPDATE:这里是更新版本,产生了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 %>