Rails 4强参数不适用于多态关联

时间:2015-07-09 05:52:49

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

我已设置多态关联并在视图中添加了嵌套表单。我试图同时创建主记录和关联。主记录已创建,但关联不会。

以下是有关的两个模型:

class UnRegistered < ActiveRecord::Base
    has_one :vehicle, as: :detailable, dependent: :destroy
    belongs_to :dealer

class Vehicle < ActiveRecord::Base
    belongs_to :purchase_details, polymorphic: true
    belongs_to :brand
    belongs_to :model
    belongs_to :color
    belongs_to :customer

以下是表单定义:

<%= form_for(@un_registered, url: panel_un_registereds_path, remote: true) do |f| %>
    <%= f.fields_for :vehicle do |f_vehicle| %>

以下是我得到的样本参数:

{"utf8"=>"✓", "un_registered"=>{"vehicle"=>{"brand_id"=>"", "model_id"=>"", "year"=>"", "engine_number"=>"gdfg", "chassis_number"=>"", "color"=>"", "options"=>""}, "original_price"=>"", "insurance"=>"", "freight"=>"", "tt"=>"", "tt_date"=>"", "duty"=>"", "clearance_fee"=>"", "other_expenses"=>"", "dealer_id"=>"", "landing_date"=>"", "loading_date"=>""}, "controller"=>"panel/un_registereds", "action"=>"create"}

以下是控制器操作:

def create
     @un_registered = UnRegistered.create(un_registered_params)
end

def un_registered_params
    params.require(:un_registered).permit(:original_price, :insurance, :freight, :tt, :tt_date, :duty, :clearance_fee, :other_expenses, :loading_date, :landing_date, :dealer_id, vehicle_attributes: [:id, :brand_id, :model_id, :engine_number, :chassis_number, :color_id, :year, :options, :selling_price, :customer_id, :purchase_date, :_destroy])
end

完整表单代码:

https://gist.github.com/THPubs/9665e0e5594e15fcc76a

新方法:

    def new
        @un_registered = UnRegistered.new
    end

1 个答案:

答案 0 :(得分:3)

您的form没问题。您只需添加以下更改。

un_registered.rb模型中

class UnRegistered < ActiveRecord::Base
  has_one :vehicle, as: :detailable, dependent: :destroy
  belongs_to :dealer
  accepts_nested_attributes_for :vehicle #this one
end

在你的控制器中,

def new
  @un_registered = UnRegistered.new
  @un_registered.build_vehicle #this one
end