我从HalfLink模型中获得了这个对象列表,例如:
@itemhl = HalfLink.find_all_by_item_id(@item, :include => :other_item)
id | item_id | other_item_id | other_item_category_id
1 | 1 | 2 | 1
2 | 1 | 3 | 4
3 | 1 | 4 | 3
4 | 1 | 6 | 1
5 | 1 | 8 | 3
6 | 1 | 7 | 4
我希望将其转换为在我的视图中显示为:
第1类的名称
的名称
第3类名称
的名称
类别4的名称
的名称
它仅显示存在的类别,按唯一类别显示组
我知道正常的方法是链接ActiveRecord,这样我可以做Category.other_items但由于其他问题,目前这不太实用。
还有其他方法可以设置吗?我应该建立一个阵列吗?
我拥有的其他一些行是:
@item_categories = @itemhl.map{|c| c.other_item.category.name }.uniq
答案 0 :(得分:0)
您实际上不需要在模型或控制器代码中进行太多修改,您需要在视图中使用一些代码:
@itemhl = HalfLink.find_all_by_item_id(@item, :include => :other_item, :order => 'other_item_category_id asc')
按类别ID获取商品订单。然后在您的视图中,根据一些简单的算法显示类别名称。
previous_category = nil
@itemh1.each do |item|
if previous_category == nil || previous_category != item.category
ouput the category_name
previous_category = item.category
end
display item name
end
答案 1 :(得分:0)
您已经拥有了检索所需内容的代码:
@itemhl = HalfLink.find_all_by_item_id(@item, :include => :other_item)
现在要将其转换为更易于呈现的形式,您可以执行以下操作:
@items_grouped_by_categories = @itemhl.group_by {|itemhl| itemhl.other_item.category.name}
# now you have a @items_grouped_by_categories, which resembeles this
# {
# category1_name => [itemhl1, itemhl4],
# category3_name => [itemhl3, itemhl5],
# .....
# }
@items_grouped_by_categories.each do |category_name, itemhls|
# output the category_name
itemhls.each do |itemhl|
other_time = itemhl.other_item
# output the other item
end
end