Rails,has_many多态关联到一个模型

时间:2010-11-07 13:14:03

标签: ruby-on-rails ruby-on-rails-3 has-and-belongs-to-many polymorphism

我希望有一个模型(事件)具有与同一用户模型的多个多态HABTM关联。

应该是这样的:

  

事件< ActiveRecord :: Base
  has_many:admin_users,:through => :event_users,:source => :userable,:source_type => '用户'   has_many:participant_users,:through => :event_users,:source => :userable,:source_type => “用户”
  has_many:paid_users,:through => :event_users,:source => :userable,:source_type => “用户”
  has_many:done_users,:through => :event_users,:source => :userable,:source_type => “用户”
端   

  class EventUser< ActiveRecord :: Base
  belongs_to:userable,:polymorphic =>真正
  belongs_to:事件
  结束

  用户< ActiveRecord的::巴斯
  has_many:event_users,:as => :userable
  has_many:events,:through => :event_users   

这几乎可以!!问题是尽管userable_type为所有不同的关联获取了“User”类型。有可能解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我担心你的协会看起来完全错了。首先,如果你在一个关联的一边有一个'has_many', 你必须在另一边有 一个'belongs_to'。其次,我猜测done_user,admin_user等继承自User。我是对的吗?

参与者,admin_user等有何不同?你真的需要每个类的类,你能用命名范围吗? 我建议你简化你的数据模型。 现在你的建模模糊了。请详细说明。

修改

老实说,我认为你的建模过于复杂。如果我是你,给定你对* _users的描述,我只会命名范围来检索该类型的用户。所以实际上

class Event < ActiveRecord::Base
  has_many :event_users
  has_many :users, :through => :event_users
end

class User < ActiveRecord::Base
  has_many :event_users
  has_many :events, :through => :event_users
end

现在,在User模型中编写命名范围以检索* _user。 这是named_scopes上的优秀截屏视频。