2012-02-02 54 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

我認爲你的假設是正確的。如果數據與個人和房屋之間的關係相關,那麼它屬於這個模型。我會做的唯一建議是將這個模型重新命名爲一個更好描述這種關係的名稱。它不一定是它加入的兩個模型的連接。我不確切知道模型最終會用到什麼,但是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 – 2012-02-02 01:06:44

+0

,將工作過。這只是爲了讓模型的目的更加明確,所以對你而言是有意義的。 – 2012-02-02 01:09:23