【问题标题】:group_by association in rails iterationrails迭代中的group_by关联
【发布时间】:2013-06-25 20:43:07
【问题描述】:

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

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... 更改迭代的输出。

【问题讨论】:

  • 这是您显示的确切代码吗? group_by 行中存在语法错误(多余的括号)。错误是说“选项”还是“选项”?
  • 错误是单数“选项”...括号是错字
  • 更新了代码,增加了更多解释

标签: ruby-on-rails-3 iteration


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多