2012-01-15 11 views
1

効率的な方法でモデルを整理する際に問題があります。これらのモデルの種類:Rails:モデルをどのように配置するのですか?

City 
Building 
CityBuilding 
WoodProduction 

もちろん、都市にはcity_buildingsを介して多くの建物があります。都市の建物には、そこに住む人口のようないくつかの基本的な属性があります。しかし、私たちが製材について話しているならば、木材の量のような、より多くの情報を保持する必要がある2つの建物があります。

ので、この例では、製材所は、私のような何かを行うことができるようにしたいでしょう:

current_city.wood_production.amount 

を、木材の量を取得し、市は1つのwood_productionの関連性を持っていることを条件とします。この時点までのすべての細かい点。

しかし、wood_productionは、木材が生産される速度も保存する必要があります。この金利は製材所のレベルに関する情報を必要とする式によって生成されます(city_buildingsにあります)。非常に不自然に感じているならば、それは、動作しますが、

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

:だから、今、私はのようなものを実行することができ

has_many :city_buildings, :through => :city 

私はそれのようwood_productionでネストされた関連付けを使用して動作してきました私はこれを達成するより良い方法があると確信しています。

何かお勧めします:)

EDIT:私のスコープは、製材ビルのスコープを指定するなど、すばらしい解決策の一部になるかもしれないと思うかもしれません。誰かがもっと詳しく考えているかもしれません。

+0

を動作しないだろうが、確かに建物だけに属することができます1つの都市... –

+0

ああ、建物は建物の静的な表現なので、多くの都市に属することができます。一方、city_buildingは、実際には特定の都市に属することができます(それは多くのことがあります) – Spyros

+0

そして、ここで何が問題なのですか?あなたはwood_productionから製材ビルに着くための簡単な方法をお探しですか? –

答えて

1

右ですので、スルー関連が正しいです。 has_one:製材所のbuilding_idが固定されているなら、あなたは別の関連付けに

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

w.sawmills.first.level 

編集を追加することができますにhas_manyに至るまで、私はここにリテラルであることだ

+0

はい、この1つはうまくいきました! (それはhas_oneと一緒に働いた) – Spyros

+0

nice、nice to know :) –

関連する問題