我正在使用 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 关联City
,Country
因此“利用”提到的关系信息隐含地“通过”Region
模型类呈现。
我应该如何进行?
注意:我“强制”belongs_to :country
在模型类中声明 ActiveRecord 关联,City
因为我想使用 RoR:counter_cache
功能(仅适用于belongs_to
关联)来计算一个国家/地区的城市。