簡體   English   中英

Rails多態關聯不會保存_type

[英]Rails polymorphic association won't save _type

我的項目中有幾個模型:請求,工作,汽車和員工。 工作是Request和Car / Employee之間的中間模型。

以下是關聯:

請求

has_many :works, dependent: :destroy
def performers
  works.map {|x| x.performer}
end

工作

belongs_to :request
belongs_to :performer, polymorphic: true

汽車

has_many :works, as: :performer
has_many :requests, through: :works, as: :performer

雇員

has_many :works, as: :performer
has_many :requests, through: :works, as: :performer

用於創建作品的視圖

<%= form_for([@request, @work]) do |f| %>
    <%= (f.collection_select :performer_id, Employee.all, :id, :name) if @request.type == "StaffRequest" %>
    <%= (f.collection_select :performer_id, Car.all, :id, :select_info) if @request.type == "CarRequest" %>
    <%= f.submit 'OK' %>
<% end %>

工作控制器

  def new
    @work = @request.works.new
  end

  def create
    @work = @request.works.new(work_params)
  end

  def work_params
      params.require(:work).permit(:performer_id, :request_id)
  end

問題是我的performer_type列始終為空,它不保存類名。 可能是什么問題? 有任何想法嗎?

它是空的,因為您沒有通過它,您應該為表單添加一個隱藏字段:

<%= form_for([@request, @work]) do |f| %>
  <% if @request.type == "StaffRequest" %>
    <%= (f.hidden_field :performer_type, value: "Employee")  %>
    <%= (f.collection_select :performer_id, Employee.all, :id, :name)  %>
  <% elsif @request.type == "CarRequest" %>
    <%= (f.hidden_field :performer_type, value: "Car") %>
    <%= (f.collection_select :performer_id, Car.all, :id, :select_info) %>
  <% end %>
    <%= f.submit 'OK' %>
<% end %>

除了:performer_id之外,您還必須傳遞:performer_type,一種方法是通過select_tag形式:

def create 
  @work = @request.works.new(work_params)
end

def work_params
  # use :performer if you use :performer as in the select form field
  params.require(:work).permit(:performer, :request_id)

  # OR

  # use :performer_id & :performer_type if you also use the hidden field
  params.require(:work).permit(:performer_id, :performer_type, :request_id)
end

有一個很好的示例(對於Rails 4.2),將單個選擇表單字段用於多態,因此您可以這樣編寫:

<%= f.grouped_collection_select :global_performer, [ Car, Employee ], :all, :model_name, :to_global_id, :name %>

如何使用全局ID在Rails中為多態關聯創建分組選擇框?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM