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