【发布时间】: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行中存在语法错误(多余的括号)。错误是说“选项”还是“选项”? -
错误是单数“选项”...括号是错字
-
更新了代码,增加了更多解释