теория activerecord / db - куда мне поместить эти поля? - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть модели, показанные ниже.Мне нужно хранить некоторые детали, которые относятся к конкретному человеку и дому (first_viewed: дата, предложение открытия: десятичная дробь и т. Д.).Я чувствую, что они должны принадлежать модели PersonHouse, но я не достаточно уверен.Какие-либо предложения?

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 Ответ

1 голос
/ 02 февраля 2012

Я думаю, ваше предположение верно. Если данные относятся к отношениям между человеком и домом, то да, они относятся к этой модели. Единственная рекомендация, которую я бы сделал, - переименовать эту модель в имя, которое лучше описывает отношения. Это не должно быть объединением двух моделей, к которым он присоединяется. Я не знаю точно, для чего в конечном итоге будет использоваться модель, но 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...