我有国家,城市,商店模型
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关系,但我认为这不是最佳方式。
答案 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