我有一个迭代,它创建一个包含项目的列。
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 ......它改变了迭代的输出。