2012-02-02 9 views
0

私は以下のモデルを持っています。私は人と家に特有の細部を保存する必要があります(first_viewed:日付、オープニングオファー:小数点など)。私はこれらがPersonH​​ouseモデルに属するべきだと思っていますが、私は十分ではありません。助言がありますか?activerecord/db theory - これらのフィールドはどこに置くのですか?

class Person < ActiveRecord::Base 
    has_many :houses, through: :person_houses 
    has_one :favorite_house, through: :person_houses  
end 

class PersonHouse < ActiveRecord::Base 
    belongs_to :house 
    belongs_to :person 
end 

class House < ActiveRecord::Base 
    has_many :house_people 
    has_many :people, through: :person_houses 
end 

すべての詳細を取得するためにこれを行うことができますが、おそらくより効果的な方法があります。

@house = House.find(1) 
@house.house_people.each do |hp| 
    puts hp.person.name 
    puts hp.first_viewed 
    puts @house.address 
end 

答えて

1

あなたの前提は正しいと思います。データが人と家の関係に関係する場合、はい、それはこのモデルに属します。私が行う唯一の勧告は、このモデルの名前を、関係の内容をよりよく説明する名前に変更することです。それは、それが結合する2つのモデルの連結である必要はありません。私はモデルが最終的にどのように使用されるのかは正確にはわかりませんが、SelectedHouse、HouseProspect、またはこれらのラインに沿ったものが機能するかもしれません。

また、家や人のモデルにプロパティを委任することができます。

class PersonHouse < AR::Base 
    belongs_to :person 
    belongs_to :house 

    delegate :address, :to => :house, :prefix => true 
    delegate :name, :to => :person, :prefix => true 
end 

person_house.address 
person_house.person_name 
+0

も、あまりにも仕事とPersonH​​ouseDetailまたはPersonH​​ouseDetailLink –

+0

のようなものを。モデルの目的をより明示的にするだけで、あなたにとって理にかなったものになります。 –

関連する問題