我正在使用Ruby on Rails v3.2.2。我有以下的模型类如何“利用”已存储在数据库中的关系数据?
class Country < ActiveRecord::Base
has_many :regions, :foreign_key => 'country_id'
end
class Region < ActiveRecord::Base
belongs_to :country, :foreign_key => 'country_id'
has_many :cities, :foreign_key => 'region_id'
end
class City < ActiveRecord::Base
belongs_to :region, :foreign_key => 'region_id'
end
和我想作一个City
belongs_to :country
。
我知道,做最简单的方法是将country_id
数据库表列添加到City
数据库表,并说明相关的ActiveRecord关联的,这样说:
class Country < ActiveRecord::Base
# ...
has_many :cities, :foreign_key => 'country_id'
end
class City < ActiveRecord::Base
# ...
belongs_to :country, :foreign_key => 'country_id'
end
然而,为了存储少数据库数据,我想我可以“使用”已存储在Region
表中的数据,因为一个城市属于一个属于一个国家的地区(这意味着一个城市属于一个国家)但是,在这种情况下,我不知道如何正确指出ActiveRecord Associatio ns代表City
和Country
,以“利用”所提到的关系信息隐含地呈现“通过”Region
模型类。
我该如何继续?
注:我是“逼迫”陈述belongs_to :country
的ActiveRecord协会在City
模型类,因为我想用RoR的:counter_cache
功能(可只为belongs_to
协会)才能算目前在一个国家的城市。
通过使用你的代码,“where”/“哪个关联”我应该说''counter_cache'选项? – Backo
你说你想统计一个国家的城市,那么我会为has_many城市关系 – ChuckE
设置counter_cache选项,我会自己定义计数器缓存。只有belongs_to协会支持它(这是一个轨道缺陷),因此我会为该国家设置更新回调以更新其城市缓存。 http://stackoverflow.com/questions/5256897/counter-cache-with-has-many-through – ChuckE