我试图在我的问题上找到答案,但没有成功。
我有模特活动,参与者,参与形式,邀请,用户。
Event has_many participants
User has_many invitations
User has_many participation_form
对于参与者我希望有一个像“based_on”这样的字段,它将是带有邀请或participant_form的引用。
我有一个想法 - 制作两个字段和一个模型方法,检查哪个字段包含值并返回“based_on”
我的问题是 - 有没有办法将一个模型引用到两个带有字段对的模型 - 类(模型名称)和值(id),所以如果将来我需要它,我会添加另一个类型。
答案 0 :(得分:2)
您可以使用多态关联:(http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
你能告诉我更多关于模型关系的内容吗?我可以写一些例子吗?为什么需要参与者模型?
答案 1 :(得分:1)
如Kuba Ploskonka
所述,您可能会受益于polymorphic association
:
-
<强>设置强>
对于参与者我希望有一个像“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