我有一个表单正在保存在数据库中,但我想保存一些将保存在不同记录中的字段。
<%= form_for @complaint, url: {action: 'create'}, :html => {:multipart => true} do |f| %>
<%= f.text_field :complaint_info %>
<%= f.fields_for :witness do |witnesses_form| %>
<%= witnesses_form.text_field :name %>
<% end %>
<% end %>
在我的控制器中:
def new
@complaint = Complaint.new
end
def create
@complaint = current_user.complaints.build(complaint_params)
if @complaint.save
redirect_to dashboard_complaint_path(@complaint)
else
render 'new'
end
end
private
def complaint_params
params.require(:complaint).permit(:complaint_info, witnesses_attributes: [:name])
end
在模型上:
class Complaint < ActiveRecord::Base
belongs_to :user
has_many :witnesses
accepts_nested_attributes_for :witnesses
end
class Witness < ActiveRecord::Base
belongs_to :complaint
end
但是我收到了这个错误:
Unpermitted parameter: witness
一切似乎都是假设的,我在这里缺少什么?
编辑:
能够通过添加以下内容来保存记录:
@complaint.witnesses.build
到控制器中的create
操作,但仍然没有让我保存:name
那里
<ActiveRecord::Relation [#<Witness id: 1, name: nil, phone: nil, complaint_id: 8, created_at: "2015-06-08 20:05:06", updated_at: "2015-06-08
编辑2:
能够通过将@complaint.witnesses.build
从create
操作移动到new
操作来修复它并修复它,现在我可以创建记录并让我保存text_fields它
答案 0 :(得分:0)
您可以尝试更改控制器和视图代码,如下所示
在控制器中
def new
@complaint = Complaint.new
@witnesses = @complaint.witnesses.build
end
def edit
@witnesses = @complaint.witnesses
end
在视图中
<%= f.fields_for :witnesses, @witnesses do |witnesses_form| %>
<%= witnesses_form.text_field :name %>
<% end %>
答案 1 :(得分:0)
我可以通过将@complaint.witnesses.build
添加到new
操作而不是create
操作来解决此问题。
所以我的控制器现在看起来像这样:
def new
@complaint = Complaint.new
@complaint.witnesses.build
end
def create
@complaint = current_user.complaints.build(complaint_params)
if @complaint.save
redirect_to dashboard_complaint_path(@complaint)
else
render 'new'
end
end
private
def complaint_params
params.require(:complaint).permit(:complaint_info, witnesses_attributes: [:name])
end