0

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

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 是浮点数:左;所以每次迭代都会创建一个类似列的表。如果不对偏好进行分组,它们似乎是随机的。我想订购它们……将它们组合起来。

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

在玩更多...我意识到这是由 group_by 返回的数组哈希并尝试使用每个数组中的单个属性的问题。我已经更新了上面的代码以反映一些变化。问题在于我通过“pref”访问数组属性的位置。

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

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

4

1 回答 1

1

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

 @preferences.sort_by { |p| p.choice.category.position }.each do |pref|
于 2013-07-01T02:53:53.380 回答