HABTM лучшая практика - PullRequest
3 голосов
/ 27 мая 2011

У меня есть 2 основных объекта: UserProfile и Property.По сути, UserProfile должен поддерживать 3 разных списка свойств (обратите внимание, что каждый тип списка будет иметь дополнительные свойства)

Кто-нибудь видит что-то не так со следующим дизайном для этого:

class UserProfile < ActiveRecord::Base
  has_many :shortlists
  has_many :booklists
  has_many :proplists
end

class Shortlist < ActiveRecord::Base
  has_and_belongs_to_many :properties
end

class Booklist < ActiveRecord::Base
  has_and_belongs_to_many :properties
end

class Proplist < ActiveRecord::Base
  has_and_belongs_to_many :properties
end

class Property < ActiveRecord::Base
  has_and_belongs_to_many :shortlists
  has_and_belongs_to_many :booklists
  has_and_belongs_to_many :proplists
end

Другой способ, который я рассматривал, - это использовать полиморфизм для сущности Property, но не уверен, какой путь будет более «рельсовым»

Ответы [ 2 ]

1 голос
/ 03 июня 2011

HABTM немного устарел и был заменен has_many: through. Кроме того, проверьте Railscast на полиморфных ассоциациях . Райан Бейтс отлично объясняет это.

0 голосов
/ 03 июня 2011

Полиморфизм кажется правильной идеей, конечно. Это смотрит тебе прямо в лицо. Но если вы зайдете слишком далеко, я бы хотел предостеречь вас от драгоценности has_many_polymorphs. Устаревшая, глючная, версия Rails 3 не близка к зрелой , и это делает вашу среду разработки чрезвычайно тяжелой (каждый запрос загружается дополнительно 4-6 секунд).

Подробнее о полиморфизме читайте здесь:

http://quickleft.com/blog/advanced-activerecord-recipes-doubly-polymorphic-join-models

...