ruby on rails-在视图中,扩展html类的推荐模式是什么



我在表中有以下<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 %>

相关内容

  • 没有找到相关文章

最新更新