rails如何生成数组以显示类别

时间:2011-08-07 07:04:49

标签: ruby-on-rails arrays categories

我从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类的名称

  • other_item 1

    的名称

  • other_item的名称6

    第3类名称

  • other_item 4的名称

  • other_item 8

    的名称

    类别4的名称

  • other_item 3的名称

  • other_item 7

    的名称

    它仅显示存在的类别,按唯一类别显示组

    我知道正常的方法是链接ActiveRecord,这样我可以做Category.other_items但由于其他问题,目前这不太实用。

    还有其他方法可以设置吗?我应该建立一个阵列吗?

    我拥有的其他一些行是:

        @item_categories = @itemhl.map{|c| c.other_item.category.name }.uniq
    
  • 2 个答案:

    答案 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