2012-01-15 69 views
1

我在以有效的方式安排我的模型時遇到了一些麻煩。這些模型的東西:Rails:如何安排模型?

City 
Building 
CityBuilding 
WoodProduction 

現在,當然,一個城市有很多通過city_buildings建築物。城市建築具有一些基本屬性,如居住在那裏的人口。但是,如果我們談論的是鋸木廠,那麼有2棟建築需要更多的信息,比如生產的木材數量。

所以,在這個例子中,鋸木廠,我希望能夠做一些事情,如:

current_city.wood_production.amount 

而且得到的木材量,提供一個城市有一個wood_production關聯。一切都很好,直到這一點。

但是,木材生產還需要存儲生產木材的比率。這個比率是由一個公式產生的,它需要關於鋸木廠建築物的信息(在city_buildings中找到)。

我已在wood_production使用嵌套協會一樣工作:

has_many :city_buildings, :through => :city 

所以,現在我可以執行類似:

c = City.first 
w = c.wood_production 
w.city_buildings.where(:building_id => ...).level 

雖然它的工作原理其中,如果感覺很不自然我有點相信有一個更好的方法來實現這一點。

任何建議請:)?

編輯:我覺得範圍可能是一個很好的解決方案的一部分,就像指定一個鋸木廠建設的範圍,也許有人想到了更詳細的東西,我現在有點處理這個想法。

+0

我是字面這裏,但肯定建築物只能屬於一個城市...... – 2012-01-15 09:46:13

+0

哦,不,建築物是建築物的靜態表示,因此它可以屬於許多城市。另一方面,城市建設確實只能屬於一個特定的城市(它有很多通過) – Spyros 2012-01-15 09:48:14

+0

這裏的問題是什麼?您是否正在尋找一種更簡單的方式來到木材生產的鋸木廠? – 2012-01-15 09:48:36

回答

1

對,所以你有通過關聯正確。如果鋸木廠的building_id是固定的,那麼你可以添加其他關聯

has_many :sawmills, :through => :city, :source => :city_buildings, :conditions => {:building_id => SAWMILL_BUILDING_ID} 

w.sawmills.first.level 

編輯:HAS_ONE:通過到的has_many是行不通的

+0

是的,這個工作正常,謝謝! (它與has_one一起工作) – Spyros 2012-01-15 10:11:08

+0

不錯,很高興知道:) – 2012-01-15 10:15:01