我对Rails相当新,我真的很欣赏一些正确方向的指示。 我理解STI的利弊。
在Rails 3.2中结合使用单表继承和多态关联来建模AR关系的最佳实践是什么?决定使用两者都会有这个appproach的任何重要缺点吗? Rails 4会改变什么吗?
到目前为止,我有以下型号:
class Course
has_many :participants, class_name: 'User'
has_many :events, as: :eventable
end
class User
has_many :events, as: :eventable
has_many :courses
end
class Resource
has_many :events, as: :eventable
end
class Subject < Resource
end
class Location < Resource
end
class Medium < Resource
end
class Event
belongs_to :eventable, polymorphic: true
end
到目前为止看起来相对容易,但我正在努力解决复杂的关联问题。 我如何设置以下与STI的关联?
我想从数据库中检索的内容
TIA和最好的问候
克里斯
答案 0 :(得分:1)
你会使用那些,以及更多Rails的魔法:)
class Course
has_many :participants, class_name: 'User'
has_many :subjects, conditions: ['type = ?', 'Subject']
has_many :locations, conditions: ['type = ?', 'Location']
has_many :events, as: :eventable
end
class User
has_many :subjects, conditions: ['type = ?', 'Subject']
has_many :locations, conditions: ['type = ?', 'Location']
has_many :events, as: :eventable
belongs_to :event, foreign_key: :teacher_id
end
class Resource
has_many :contacts, class_name: 'User'
has_many :events, as: :eventable
end
class Event
belongs_to :eventable, polymorphic: true
has_many :teachers, class_name: 'User'
has_many :subjects, conditions: ['type = ?', 'Subject']
has_many :locations, conditions: ['type = ?', 'Location']
has_many :media, conditions: ['type = ?', 'Medium']
end
我认为这涵盖了所有用例。
注意:您可能应该将模型从Media
重命名为Medium
,因为Rails可以更好地处理单一化的模型名称,如果不这样做,可能会遇到一些问题。