アイテムを含む列を作成する反復があります。
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... を使用しない限り、これは正常に機能します。