activerecord / db theory - 我在哪里放这些字段?

时间:2012-02-02 00:55:49

标签: ruby-on-rails database-design activerecord

我有如下所示的模型。我需要存储一些特定于一个人和一个房子的细节(first_viewed:date,open offer:decimal等)。我觉得这些应该属于PersonH​​ouse模型,但我不够确定。有什么建议?

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 个答案:

答案 0 :(得分: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