如果使用x时间为零,如何不保存额外的记录

时间:2015-06-10 18:58:08

标签: ruby-on-rails

我使用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没有多少经验。

谢谢!

1 个答案:

答案 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