У меня есть два типа классов, один из которых принадлежит другому, и один из которых полиморфно относится к другому виду.biirectional принадлежит_to (один полиморфный)
class Term < ActiveRecord::Base
belongs_to :reference, :polymorphic => true
end
class Course < ActiveRecord::Base
belongs_to :term
end
class Career < ActiveRecord::Base
belongs_to :term
end
Отношения являются собственными, потому что я хочу быстрый доступ в обоих направлениях. У меня сложилось впечатление, что отношения has_one
будут медленнее, потому что вам нужно будет запросить противоположную таблицу для поиска подходящего _id
.
Прямо сейчас, когда я создаю курс c
, я запускаю after_save метод, который создает термин t
таким образом, что c.term = t
и t.reference = c
. Это похоже на хак, хотя ... есть ли способ автоматически указывать рельсы, что это соотношение существует и что настройка c.term = t
должна автоматически делать t.reference = c
?
Я знаю, что с полиморфными ассоциациями вы можете указать атрибут :as
(см. API), но похоже, что это не работает для belongs_to.
class Asset < ActiveRecord::Base
belongs_to :attachable, :polymorphic => true
def attachable_type=(sType)
super(sType.to_s.classify.constantize.base_class.to_s)
end
end
class Post < ActiveRecord::Base
# because we store "Post" in attachable_type now :dependent => :destroy will work
has_many :assets, :as => :attachable, :dependent => :destroy
end
хм, хорошо, точка взята. добавление индексов и стирание двунаправленных ассоциаций 'own_to'. Благодарю. – unsorted
* полиморфизм;) – candrews