Ruby循环 - 确定值

时间:2015-06-25 11:21:13

标签: ruby-on-rails ruby

我正在循环一些项目,名称应该是自我解释的:

  <% [@in_force_item, @draft_item, @historical_items].compact.flatten.each do |item| %>
      <tr>
        <td>
          <label><input class="select"  type="checkbox" /></label>
        </td>
       <td>
          <% if item == @draft_item %>
            <div> <%= link_to('', edit_account_item_path(@account, @draft_loa_item), class: 'black-icon-color') %></div>
          <% else %>
                  <i class="lock"></i>
              <span class='black-icon-color'></span>
          <% end %>
        </td>
        <td>
          <% updated_at = datetime_to_string item.updated_at %>
           <%= link_to(updated_at, account_item_path(@account, item)) %>
        </td>
        <td><%= lifecycle_label(item) %></td>
      </tr>
  <% end %>

我遇到问题的一条线是检查该项目是否为草稿。

<% if item == @draft_item %>

这似乎不起作用,我不知道如何去做。我的Item模型中是否需要一个方法来检查它是否为草稿?

我怎样才能做到这一点?

编辑:模型有这个:

    COMPOSITE_DRAFT = [LIFECYCLE_DRAFT_NUM, LIFECYCLE_RETURNED_NUM]
LIFECYCLE_DRAFT_NAME = 'Draft'
LIFECYCLE_DRAFT_NUM = 0
 LIFECYCLE_RETURNED_NAME = 'Returned'
  LIFECYCLE_RETURNED_NUM = 2

所以我应该可以使用类似的东西:

item.lifecycle_num.????

3 个答案:

答案 0 :(得分:0)

您的商品应该有状态, - 这样您就可以调用item.draft?方法,而且,您也不需要三个独立的实例变量。请查看aasm gem以获取更多信息。

答案 1 :(得分:0)

假设这三个都是ActiveRecord对象,您可以检查item.id == @draft_item.id

答案 2 :(得分:0)

根据我的理解,每个&#39; @in_force_item,@ draft_item,@ historical_items&#39;也是数组。是

因此,当您执行[@in_force_item, @draft_item, @historical_items].flatten结果时,您将获得包含来自&#39; @in_force_item,@ draft_item,@ historical_items&#39;阵列。阵列&#39; @ draft_item&#39;在这个新阵列中没有,但是这个&#39;的元素。在场。

所以,你可以写:

  <% if @draft_item.include? (item) %>