2

我的表中有以下<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">

我知道我应该把它移到助手,但是如何为扩展类编写好的案例语句取决于这些语句?

4

2 回答 2

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 -%>
于 2012-12-25T02:17:21.800 回答
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 嵌套在其中

更新:这里是产生 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 %>
于 2012-12-25T02:13:46.823 回答