Rails连接表或HABTM关联

时间:2010-07-28 03:31:17

标签: ruby-on-rails database activerecord associations

在我正在构建的应用程序中,我希望有事件。然后,人们可以通过创建团队,直接注册活动(没有团队)或加入现有团队来注册活动。我最初将其设置为Event has_many团队,Team has_many用户,用户belongs_to团队和事件。但是,如果注册用户想要加入另一个事件(或另一个事件的团队),以及尝试在控制面板中列出@ user.events或@ user.teams等内容时,我会预见到问题。有人建议使用连接表并创建注册模型/迁移来加入这些。我可以拥有属于Event,Team和User的连接模型吗?我接近这一切都错了吗?

1 个答案:

答案 0 :(得分:2)

您可以创建连接模型注册,并使belongs_to多态,以便它可以引用任何类型的对象。这是一个例子:

模型/ team.rb:

class Team < ActiveRecord::Base
  has_many :registrations, :as => :owner
end

模型/ user.rb

class User < ActiveRecord::Base
  has_many :registrations, :as => :owner
end

模型/ registration.rb

class Registration < ActiveRecord::Base
  belongs_to :owner, :polymorphic => true
end

模型/ event.rb

class Event < ActiveRecord::Base
  has_many :registrations
end

分贝/迁移/ 1234_add_registrations.rb

...
t.belongs_to :owner, :polymorphic => true
t.belongs_to :event
...

现在,您可以查看注册情况,了解谁已注册参加您的活动。您可以使用has_many:events,:through =&gt; :registrations,:source =&gt; :所有者要回复用户,但请注意有一些限制,例如has_many:owner,:through =&gt; :注册,在has_many_polymorphs等插件中解决。