两种模型的一种关系

时间:2014-08-23 10:00:48

标签: ruby-on-rails ruby-on-rails-4

我试图在我的问题上找到答案,但没有成功。

我有模特活动,参与者,参与形式,邀请,用户。

Event has_many participants
User has_many invitations
User has_many participation_form

对于参与者我希望有一个像“based_on”这样的字段,它将是带有邀请或participant_form的引用。

我有一个想法 - 制作两个字段和一个模型方法,检查哪个字段包含值并返回“based_on”

我的问题是 - 有没有办法将一个模型引用到两个带有字段对的模型 - 类(模型名称)和值(id),所以如果将来我需要它,我会添加另一个类型。

2 个答案:

答案 0 :(得分:2)

您可以使用多态关联:(http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

你能告诉我更多关于模型关系的内容吗?我可以写一些例子吗?为什么需要参与者模型?

答案 1 :(得分:1)

Kuba Ploskonka所述,您可能会受益于polymorphic association

enter image description here

-

<强>设置

  

对于参与者我希望有一个像“based_on”这样的字段,它将是带有邀请或participant_form的引用。

根据您的规格,您需要使用以下内容:

#app/models/participation.rb
Class Participation < ActiveRecord::Base
   belongs_to :participle, polymorphic: true
end

#app/models/invitation.rb
Class Invitation < ActiveRecord::Base
   has_many :participations, as: :participle
end

#app/models/participation_form.rb
Class ParticipationForm < ActiveRecord::Base
   has_many :participations, as: :participle
end

这将使您能够按如下方式保存对象:

#app/controllers/invitations_controller.rb
Class InvitationsController < ApplicationController
   def create
      @invitation = Invitation.new invitation_params
      @invitation.participations.build #-> will save a blank "Participation" object 
      @inviation.save
   end
end