rails迭代中的group_by关联

时间:2013-06-25 20:43:08

标签: ruby-on-rails-3 iteration

我有一个迭代,用于创建包含项目的列。

Preference 
belongs_to :option

Option
has_many :preferences
belongs_to :category

Category 
has_many :options

因此,当我迭代首选项时,我希望能够按选项类别对它们进行分组。

  <% @preferences.group_by { |p| p.choice.category_id }.each do |pref| %>
      <div class="dutylog_column">
          <div class="dutylog_column_header"><span><%= category(pref) %></span></div>
          <ul class="dutylog_column_items">
            <% @users_logs.each do |dutylog| %>
              <li><%= dutylog.properties[pref.choice.try(:name)] %></li>
            <% end %>
            <%= content_tag :li, sum_column(pref.choice.try(:name)), class: "totals_row" if has_dutylogs? %>
              <li class="new_dutylog_entry"><%= f.text_field pref.choice.name, id: pref.choice.name, class: "sum_number" unless pref.choice.name.blank? %></li>
          </ul>
      </div> <%# dutylog_column %>
      <% end %>

div.dutylog_column是float:left;所以每次迭代都会创建一个像列一样的表。如果不对首选项进行分组,它们看起来是随机的。我想订购它们......将它们分组。

看起来我上面的例子应该可以工作......但是我得到了“未定义的方法'选项'。

在玩更多...我意识到这是由group_by返回并试图使用每个数组的各个属性的数组散列的问题。我已更新上面的代码以反映一些更改。问题在于我通过'pref'访问数组属性。

<%= dutylog.properties[pref.choice.try(:name)] %>

错误是抱怨选择关联。哪个工作正常,除非我使用group_by ...来改变迭代的输出。

1 个答案:

答案 0 :(得分:1)

我只需要使用sort_by而不是group_by。

 @preferences.sort_by { |p| p.choice.category.position }.each do |pref|