假设我有类似
的内容Country has_many :cities
并且模型City
具有属性council_id
。只有Country
的实例,检索包含所有相关Councils
的集合的最佳方法是什么?
我知道这可以很容易地将Country
实例传递给某个方法并迭代council_ids
,但我想知道是否有更优雅的方式?
由于
答案 0 :(得分:5)
如果城市有
belongs_to :country
belongs_to :council
然后国家可以
has_many :cities
has_many :councils, :through => :cities
然后你可以做some_country.councils
。在幕后,这构造了一个连接查询来加载相关的委员会。如果一个城市有很多议会,这仍然有效 - has_many :through
可以解决这个问题
答案 1 :(得分:0)
这是我能想到的最短路径(假设你设置了@country
个实例):
Council.joins(:city => :countries).where('countries.id = ?', @country.id)
您可能只想为每个委员会保存country_id
,以便通过以下方式轻松实现:
@country.councils
答案 2 :(得分:0)
如果委员会是典范,请尝试以下方法:
Council.where(city_id: @country.cities)
如果council_id是City模型的属性:
@country.cities.map {|c| c.council_id}