У меня есть два вида классов, один из которых принадлежит_ другому, а другой - полиморфно, принадлежит другому виду.
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
.Это похоже на взлом ... хотя есть ли способ автоматически сообщить rails, что эта связь существует и что установка c.term = t
должна автоматически сделать t.reference = c
?
Я знаю, что с полиморфными ассоциациями вы можетеукажите атрибут :as
(см. API ), но похоже, что это не работает для принадлежащим.
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