我正在使用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