HAVE和IS之间的ActiveRecord关系

时间:2012-01-24 13:34:23

标签: ruby-on-rails ruby activerecord

所以我在Ruby on Rails设置中有以下模型:用户课程

课程需要 content_managers 而那些 content_managers 用户模型中的多个人组成

我是新手,所以请耐心等待。我正在考虑创建一个名为content_managers的新模型,它具有user_id和一个链接两个表的course_id。我认为课程有内容管理者是有道理的。但是,从用户模型来看,用户拥有content_managers是没有意义的。其中一些是content_managers。

从这个角度来看,我认为我错误地思考它并且需要以与我想象的不同的方式设置我的ActiveRecord。任何帮助表示赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

ActiveRecord中没有“have”或“are”,只有“has_many”,“has_one”和“belongs_to”。使用这些工具,您应该能够做您想做的事。

一个例子:

class Course < ActiveRecord::Base
  has_many :content_managers
end

class ContentManager < ActiveRecord::Base
  has_many :content_manager_members
  has_many :users,
    :through => :content_manager_members,
    :source => :user
end

class ContentManagerMember < ActiveRecord::Base
  belongs_to :course_manager
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :content_manager_members
  has_many :content_managers,
    :through => :content_manager_members
end

请务必正确索引这些并且您应该没问题,但从用户导航到课程的速度会很慢。您可能需要缓存其中一些以便找到所需的性能级别,但这是一个在测试期间将被发现的单独问题。

每当实现这样的事情时,请务必使用足够数量的测试数据加载它,这些数据将代表预期使用级别的10倍,以了解上限的位置。有些结构仅在平凡的数据集大小下表现非常好,但在暴露于真实条件下时会熔化。