Rails:如何将模型的has_many对象检索为集合?

时间:2012-06-24 08:07:49

标签: ruby-on-rails ruby-on-rails-3.1

假设我有类似

的内容
Country has_many :cities

并且模型City具有属性council_id。只有Country的实例,检索包含所有相关Councils的集合的最佳方法是什么?

我知道这可以很容易地将Country实例传递给某个方法并迭代council_ids,但我想知道是否有更优雅的方式?

由于

3 个答案:

答案 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}