多个group_by

时间:2013-09-13 10:57:15

标签: ruby-on-rails-3

我有三种模式:

dimension_mois 
Admin::Style
Admin::Album

他们是这样的:

**DimensionMois**
has_many :admin_styles, :class_name=>"Admin::Style"

**Admin::Style**
has_many :admin_albums, :class_name=>"Admin::Album"

**Admin::Album**
belongs_to :admin_style, :class_name=>"Admin::Style"
belongs_to :dimension_mois

页面的概念是显示类似的东西:

Schema of what I want

我想每月展示一次。每个月可以有N种款式。每种风格都可以有N张专辑。

我不知道如何做到这一点。我尝试过group_by,但结果永远不会好。

有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:1)

你可能会过度思考这个问题。我相信你只需要迭代对象及其关联,如下所示:

@dimension_moises = DimensionMois.includes(:admin_styles => :admin_albums)
// Using Haml syntax
%ul
  - @dimension_moises.each do |dimension_mois|
    %li
      = dimension_mois.name
      %ul
        - dimension_mois.admin_styles.each do |admin_style|
          %li
            = admin_style.name
            %ul
              - admin_style.admin_albums.each do |admin_album|
                %li= admin_album.title

这将为您提供所有DimensionMois的嵌套分层列表,其中包含该对象的Admin :: Styles和Admin :: Albums。您可以使用CSS,JS,以及任何样式列表。