Ruby on rails Rails仅在嵌套表单的字段不为空时保存记录

Ruby on rails Rails仅在嵌套表单的字段不为空时保存记录,ruby-on-rails,forms,Ruby On Rails,Forms,在我的Rails应用程序中,我有一个Kid模型和一个Allergy模型,其中Kid有很多过敏症。我还创建了一个嵌套表单,以便在创建新的kid时,allergy字段位于kid表单中。这是我的孩子控制器中的: def new @kid = Kid.new allergy = @kid.allergies.build end 这是我的index.html.erb,嵌套在我的createkid表单中: <%= f.fields_for :allergies, Allergy.new

在我的Rails应用程序中,我有一个
Kid
模型和一个
Allergy
模型,其中
Kid
有很多
过敏症。我还创建了一个嵌套表单,以便在创建新的
kid
时,
allergy
字段位于
kid
表单中。这是我的
孩子
控制器中的:

def new
   @kid = Kid.new
   allergy = @kid.allergies.build
end
这是我的index.html.erb,嵌套在我的create
kid
表单中:

<%= f.fields_for :allergies, Allergy.new do |u| %>
     <%= u.label :description, "Description", class: "control-label" %>    
     <%= u.text_field :description, class: "input-sm form-control" %>
     <%= u.label :symptoms, "Symptoms", class: "control-label",  %>    
     <%= u.text_field :symptoms, class: "input-sm form-control" %>
<%end%>

这对于只将一条
allergy
记录插入
allergy
模型非常有效,但是我希望能够列出多达5条
allergy
输入,并且只插入用户填写的那些输入,因为
孩子的
allergy
数量可能不定

我用了这篇文章:


但是,对于嵌套表单,我无法实现这一点。感谢您的帮助,谢谢

要为关系获取多个嵌套表单,您需要构建要在表单中显示的相关项的数量,例如:

def new
    @kid = Kid.new
    5.times do
        @kid.allergies.build
    end
end
accepts_nested_attributes_for :allergies, reject_if: ->(allergy){ allergy['description'].blank? && allergy['symptoms'].blank? }
然后,若要拒绝在数据库中保存任何空关系,可以在模型中使用以下方法:

def new
    @kid = Kid.new
    5.times do
        @kid.allergies.build
    end
end
accepts_nested_attributes_for :allergies, reject_if: ->(allergy){ allergy['description'].blank? && allergy['symptoms'].blank? }

您是否尝试过
:如果
,请拒绝?