活动记录:查询嵌套多个模型

时间:2011-08-25 15:37:20

标签: ruby-on-rails activerecord

我有一个拥有许多目录的商店,反过来每个目录都有很多产品。

产品和目录共享多对多的关系。 一种产品可以属于许多目录和副产品。

所以,我的模型定义是这样的:

class Store < ActiveRecord::Base
   has_many :store_catalogs
   has_many :catalogs, :through => :store_catalogs
end

class StoreCatalog < ActiveRecord::Base
  belongs_to :store
  belongs_to :catalog
end

class Catalog < ActiveRecord::Base
    has_many :store_catalogs
    has_many :stores, :through => :store_catalogs
    has_and_belongs_to_many :product_set, :class_name => "Product"
 end    

class Product < ActiveRecord::Base
   has_and_belongs_to_many :catalogs
end

现在,我想访问属于商店的所有产品。 我如何将这些链接在一起以便我得到它?请建议。

我正在从rails控制台尝试各种组合来提取数据,不确定控制台本身是否有任何机会限制基于关系的查询(尽管我不相信它不会)。

1 个答案:

答案 0 :(得分:1)

我认为这应该可以解决你的问题

class Store < ActiveRecord::Base
  has_many :catalogs
  has_many :products, :through => :catalogs
end

class Catalog < ActiveRecord::Base
  belongs_to :store
  has_and_belongs_to_many :products
end

class Product < ActiveRecord::Base
  has_and_belongs_to_many :catalogs
end

然后你需要在数据库中使用一个名为catalogs_products的表,其中包含catalog_id和product_id以链接has_and_belongs_to_many关联。

然后,为了从商店获取所有产品,只需

Store.find(id).products