我有以下工作者模型,它接受服务的嵌套属性。
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
在我的表单中,我使用多选嵌套字段作为名称。
用户应该能够使用此字段选择他们提供的服务,然后创建服务。在屏幕截图的情况下,应该创建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 %>