Rails 5 - 具有多选的未允许的参数

时间:2017-05-07 04:26:19

标签: ruby-on-rails

我有以下工作者模型,它接受服务的嵌套属性。

worker.rb

class Worker < ApplicationRecord
  has_many :services, dependent: :destroy
  accepts_nested_attributes_for :services
end

service.rb

class Service < ApplicationRecord
  belongs_to :worker, optional: true
end

服务有一个属性'name'是服务的名称。

我已将工作人员强大的名称属性列入白名单。

def worker_params
  params.require(:worker).permit(
    :first_name, :last_name, services_attributes: [:name, :_destroy])
end

在我的表单中,我使用多选嵌套字段作为名称。

Form multi input field

用户应该能够使用此字段选择他们提供的服务,然后创建服务。在屏幕截图的情况下,应该创建3个服务。

当我提交表单时,我收到了unpermitted parameter: name。参数在下面;

Parameters:{"utf8"=>"✓","authenticity_token"=>"wpxjde/exG29soyCA7kEaceeKZSxShcFjpD6gjG
1GF2Yg3mAdfMd4UJQi3tTHOeS/XOas9aMIjUiRriDxJZKrg==", "worker"=>
{"first_name"=>"", "last_name"=>"", "services_attributes"=>{"0"=>
{"name"=>["", "Cleaning", "Organising", "Washing"], 
"_destroy"=>"false"}}}, 
"commit"=>"Create worker"}

我如何接受用户所做的选择,并为每个选项创建一个服务对象?

谢谢。

修改

工人控制器

  def new
    @worker = Worker.new
    @worker.services.build
  end

  def create
    @worker = Worker.create(worker_params)
    if @worker.save
      redirect_to dashboard_path
    else
      flash.now[:danger] = "Please check the errors below"
      render :new
    end
  end

查看表单字段

<%= f.simple_fields_for :services do |service| %>
<tr class="nested-fields">
  <td><%= f.input :name, label: false, class: 'form-control', as: :select, collection: services_helper, input_html: { multiple: true, class: 'service-dropdown' } %></td>
  <td><%= link_to_remove_association "remove service", f, class: 'btn btn-danger' %></td>
</tr>
<% end %>

0 个答案:

没有答案