0

我对 Rails 还很陌生,我真的很感激一些正确方向的指示。我了解 STI 的利弊。

在 Rails 3.2 中结合单表继承和多态关联来建模 AR 关系的最佳实践是什么?通过决定同时使用这两种方法,这种方法会有什么重要的缺点吗?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 和最好的问候

克里斯

4

1 回答 1

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

我认为这涵盖了您的所有用例。

注意:您可能应该将模型从 重命名为MediaMedium因为 Rails 使用单数模型名称效果更好,如果不这样做,您可能会遇到一些问题。

于 2013-06-25T14:06:36.993 回答