unknown attribute on polymorphic nested form objec

2019-06-01 05:18发布

问题:

I am trying to create an associated polymorphic object through fields_for.

I am getting an unknown attribute error though when the parent is created, are the @order params not getting through somehow?

Parent/Order controller -

# GET /orders/new
  def new
    @order = Order.new
    @order.build_patient
    @order.product = OrthosisSpecification.new
  end

# GET /hotels/1/edit
  def edit
    @order.build_patient
  end

  # POST /orders
  # POST /orders.json
  def create
    @order = Order.new(order_params)

    respond_to do |format|
      if @order.save
        format.html { redirect_to @order, notice: 'Order was successfully created.' }
        format.json { render :show, status: :created, location: @order }
      else
        format.html { render :new }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  private

    # Never trust parameters from the scary internet, only allow the white list through.
    def order_params
        params.require(:order).permit!
    end

Form -

  <%= form_for(@order) do |f| %>
  <% if @order.errors.any? %>
  <% end %>

<%= f.fields_for :orthosis_specification do |fa| %>

Order Model -

class Order < ActiveRecord::Base
  has_one :patient
  belongs_to :product, polymorphic: true
  accepts_nested_attributes_for :patient,
                                reject_if: proc { |attributes| attributes['first_name'].blank? },
                                allow_destroy: true
  accepts_nested_attributes_for :product


end

Full error -

unknown attribute 'orthosis_specification' for Order.

order_params -

>> order_params
=> {"patient_attributes"=>{"first_name"=>"", "last_name"=>"", "dob"=>"", "sex"=>"1", "diagnosis"=>"1", "posterior_flattening"=>"1", "circumference"=>"", "ap"=>"", "ml"=>"", "ci"=>"", "frontal_area"=>"1", "parietal_lateral"=>"1", "ear_position"=>"1"}, "orthosis_specification"=>{"transfer_name"=>"1", "modifications"=>"1", "primary_mods"=>"1", "top_opening"=>"1", "side_opening"=>"1", "chape_position"=>"1"}, "order_date"=>"", "date_required"=>""}

params -

authenticity_token"=>"v6gVARW+vnApuZpit6IW81ouytlWWQa1Orb4kymseESZmgiFI4KYhOrYyRQuu7yn3mijRp9m7LlFxQlMq7OaAA==", "order"=>{"patient_attributes"=>{"first_name"=>"", "last_name"=>"", "dob"=>"", "sex"=>"1", "diagnosis"=>"1", "posterior_flattening"=>"1", "circumference"=>"", "ap"=>"", "ml"=>"", "ci"=>"", "frontal_area"=>"1", "parietal_lateral"=>"1", "ear_position"=>"1"}, "orthosis_specification"=>{"transfer_name"=>"1", "modifications"=>"1", "primary_mods"=>"1", "top_opening"=>"1", "side_opening"=>"1", "chape_position"=>"1"}, "order_date"=>"", "date_required"=>""}, "commit"=>"Create Order", "controller"=>"orders", "action"=>"create"}

Orthosis Spec Model -

class OrthosisSpecification < ActiveRecord::Base
    has_one :order, :as => :product, class_name: 'Order'
    accepts_nested_attributes_for :order
end

Thanks for any help!