has_many和has_many的关系

时间:2014-03-04 02:15:59

标签: ruby-on-rails activerecord

我有国家,城市,商店模型

class Country < ActiveRecord::Base
  has_many :cities
end

class City < ActiveRecord::Base
  belongs_to :country
  has_many :shops 
end

class Shop < ActiveRecord::Base
  belongs_to :city
end

如何在activerecord中获得country.shops? (到国内所有商店)

我通常使用Country.cities.collect {| c | c.shops} 但这不是activerecord对象。

我考虑在商店模型上添加country_id并设置has_many关系,但我认为这不是最佳方式。

2 个答案:

答案 0 :(得分:1)

在国家/地区,添加has_many:通过关系:

class Country < ActiveRecord::Base
  has_many :cities
  has_many :shops, through: :cities
end

现在,您可以撰写country.shops并获得适当的ActiveRecord关系,您可以在其中说出country.shops.where name:"Nieman Marcus"等内容以及其他此类查询。

答案 1 :(得分:0)

你可以在Class Country中定义一个方法

def all_shops
  self.cities.collect { |c| c.shops }
end

你也可以使用Mongoid :: Tree

def all_shops
  Shop.where(:parent_ids => self.id)
end