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 は float: left; そのため、反復ごとにテーブルのような列が作成されます。好みをグループ化しないと、それらはランダムに見えます。私はそれらを注文したいのですが...それらをグループ化します。

上記の例は機能するはずですが、「配列の未定義のメソッド「オプション」が表示されます。

もっと遊んでみると... group_byによって返される配列のハッシュの問題であり、各配列の個々の属性を使用しようとしていることに気づきました。上記のコードを更新して、いくつかの変更を反映させました。問題は、「pref」を介して配列属性にアクセスしている場所にあります。

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

エラーは、選択の関連付けについて不平を言っています。反復からの出力を変更する group_by... を使用しない限り、これは正常に機能します。

4

1 に答える 1