通过子数组迭代来检查日期

时间:2014-06-02 19:36:28

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个包含多组日期值的员工数据库。目前我以这种格式输出这些数据:

<% @trainings.each do |training| %>
  <tr>
    <td><%= training.birthday %></td>
    <td><%= training.comp_cert %></td>
    <td><%= training.cdl %></td>
    <td><%= training.forklift %></td>
  </tr>
<% end %>

我想在每个循环中迭代这些日期并检查日期

Time.now + 30.days

但是我遇到了一些问题。我试过这个:

<% @trainings.each do |training| %>
  <% training.each do |t| %>
    <% if t < Time.now + 30.days %>
      <tr class="warning">
    <% else %>
      <tr class="success">
    <% end %>
  <% end %>

  <!-- Table Data Here -->

<% end %>

但是它告诉我在训练中没有每种方法都被称为。有没有更有效的方法来做到这一点,而不仅仅是手动检查每个单独的键?

2 个答案:

答案 0 :(得分:2)

您无法对单个对象进行迭代。您只能在集合上使用迭代器模式。我建议以下方法,对于初学者:)

<% @trainings.each do |training| %>
  <% %w{birthday comp_cert cdl forklift}.each do |field_name| %>
    <% if training[field_name] < Time.now + 30.days %>
      <tr class="warning">
    <% else %>
      <tr class="success">
    <% end %>
  <% end %>

  <!-- Table Data Here -->

<% end %>

答案 1 :(得分:1)

您可以使用帮助

def old_training?(training)
  %{birthday comp_cert cdl forklift}.any? { |field| training[field] < Time.now + 30.days }
end

并在视野中:

<% @trainings.each do |training| %>
    <tr class="<%= old_training?(training) ? "warning" : "success" %>">

    </tr>
<% end %>