Ruby on rails 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
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 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? }
您是否尝试过:如果,请拒绝?