多态关系

问题描述

我的问题是通过多态迁移生成公司内合作伙伴的记录。 合作伙伴来自我的用户集合。

这是我的表格

<%= form_with(model: [@company,@partner],remote: true) do |f| %>
            <div class="form-group">
                <%= f.label 'Selecciona un socio' %>
                <%= f.collection_select(:partnershipable_id,User.all,:id,:name,{:prompt => 'Selecciona'},{class: 'form-control'}) %>
            </div>
<% end %>

我的模型是

应用/模型/合作伙伴

class Partner < ApplicationRecord
  belongs_to :company
  belongs_to :partnershipable,polymorphic: true
end

应用/模型/用户

class User < ApplicationRecord
    has_many   :partners,as: :partnershipable
end

应用/模型/公司

class Company < ApplicationRecord
    has_many    :partners,as: :partnershipable
end

表单应该如何正确地将用户保存为合作伙伴。

解决方法

如果要选择多态关联,还需要提供类型。

<%= form_with(model: [@company,@partner],remote: true) do |f| %>
  <div class="form-group">
    <%= f.label 'Selecciona un socio' %>
    <%= f.collection_select(:partnershipable_id,User.all,:id,:name,{:prompt => 'Selecciona'},{class: 'form-control'}) %>
    <%= f.hidden_input(:partnershipable_type,'User') %>
  </div>
<% end %>

由于类型似乎是固定的,因此您也可以在接收端的控制器中设置该值。