0

在rails中我知道你可以做到

<tr class="<%= cycle("even", "odd") %>">

循环给定行的类。

但在这种情况下

<% @products.each do |p| %>
<tr class="headers">
    <td><%= p.name %></td>
    <td><%= p.idnum %></td>
    ...
</tr>
<% end %>

我如何自动替换列类?

有什么办法我可以这样吗?(为了说明起见,发明了一些奇特的方法名称('.column_names'))

<% @products.each do |p| %>
    <tr class="headers">
        <% products.column_names.each do |c| %>
            <td class="<%= cycle("even", "odd") %>"><%= c %></td>
        <% end %>
    </tr>
<% end %>

编辑:(恰当的例子)

<table>
  <tr class="headers">
    <td class="even">&nbsp;</td>
    <td class="odd">Name</td>
    <td class="even">Followers</td>
    <td class="odd">Date Joined</td>
    <td class="even">Slogan</td>
    <td class="odd">Location(s)</td>
    <td class="even">Segments(s)</td>
    <td class="odd">Website</td>
  </tr>
  <tr class="body">
    <td class="even"><img src="<%= company.thumbnail_logo %>"></td>
    <td class="odd"><%= company.company_name %></td>
    <td class="even"><%= company.followers %></td>
    <td class="odd">...</td>
    ...
  </tr>
</table>

这就是我目前正在写的内容,你可以看到它相当冗长。我希望减少这一点。

4

3 回答 3

5

这只是为了造型目的吗?您可以使用 CSS3 来执行此操作,而无需分配类。

tr:nth-of-type(even){ your_css_here }

或者

td:nth-of-type(even){ your_css_here }

替换evenodd如果这是你想要的

另外,你不会使用<th>标题吗?

于 2012-07-21T19:31:31.557 回答
2

您可以在同一个循环中使用多个命名循环来实现此效果。这是一个使用模型的示例,该模型使用与属性名称对应的类来Example打印其自己的每个属性:<td>

<% @examples.each do |example| %>
  <tr class="<%= cycle('odd', 'even', :name => 'row-cycle') %>">
    <% example.attributes.each_pair do |attribute, value| %>
      <td class="<%= cycle(*example.attribute_names, :name => 'column-cycle') %>"><%= value %></td>
    <% end %>
  </tr>
<% end %>

此代码的一些示例输出:

<tr class="odd">
  <td class="id">1</td>
  <td class="name">Brandan</td>
  <td class="location">Raleigh</td>
  <td class="created_at">2012-07-21 21:14:45 UTC</td>
  <td class="updated_at">2012-07-21 21:14:45 UTC</td>
</tr>

如果您不想打印每条记录上的所有属性,您可以调整它以满足您的需要。

于 2012-07-21T21:23:17.503 回答
0

实际上 Rails 中有一个循环助手:

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-cycle

于 2012-07-21T19:13:50.407 回答