我使用x.times
构建嵌套表单字段,以便在数据库中保存多条记录。
我想要做的是,如果用户没有在其中一个字段2.times
中输入任何内容,那么它只会保存已填充的字段。
这是控制器
class Dashboard::ComplaintsController < ApplicationController
def new
@complaint = Complaint.new
2.times { @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
end
这是视图
<%= form_for @complaint, url: {action: 'create'}, :html => {:multipart => true} do |f| %>
<%= f.text_field :title, placeholder: 'Ej: Trabajo realizado incorrectamente', class: 'form-control', tabindex: '-1' %>
<%= f.fields_for :witnesses do |witnesses_form| %>
<div class="row">
<div class="col-md-6 col-xs-6 col-sm-6">
<%= witnesses_form.text_field :name, placeholder: 'Escriba el nombre del testigo', tabindex: '-1' %>
</div>
<div class="col-md-6 col-xs-6 col-sm-6">
<%= witnesses_form.text_field :phone, placeholder: 'Escriba el número de teléfono' %>
</div>
</div>
<% end %>
<% end %>
对不起,如果它看起来像一个菜鸟问题,但我对rubyonrails没有多少经验。
谢谢!
答案 0 :(得分:0)
我能够通过在模型中添加以下内容来解决这个问题:
我只在我的投诉模型中有这个:
accepts_nested_attributes_for :witnesses
我把它更改为:
accepts_nested_attributes_for :witnesses, reject_if: proc { |attributes| attributes[:name].blank? }
现在只有在这种情况下输入了证人姓名时才会保存。
http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html