【问题标题】:Nested Model Form with required fields does not Save带有必填字段的嵌套模型表单不保存
【发布时间】:2014-02-24 07:06:02
【问题描述】:

我有一个包含父 Foo 和子 Bar 的嵌套模型表单。

我关注http://railscasts.com/episodes/196-nested-model-form-revised,为我完成了这个设置。效果很好。我可以通过 javascript(根据 railscast)轻松添加和删除 Bars

背景:

我在 Bar 中有一个必填字段“名称”。

问题:

如果用户将名称字段留空,然后删除该栏(通过 javascript),它不会让我保存表单。我没有收到任何通知。我相信由于客户端验证已将其踢到我删除的必填字段上,表单不会让我提交到服务器。

Foo.rb

validates :title, presence: true
has_many bars
accepts_nested_attributes_for :workouts, :allow_destroy => true

Bar.rb

validates :name, presence: true

views/foos/_form.html.haml

= simple_form_for(@foo) do |f|
  .form_inputs
    = f.input :title
    = f.simple_fields_for :bars do |p|
      = render "bar_fields", f: p
    %br
    = link_to_add_fields "Add Bar", f, :bars
    %br
    = f.button :submit

views/foos/_bar_fields.html.haml

%h4 Bar
= f.input :name
= f.input :description

= f.hidden_field :_destroy
= link_to "Delete Bar", '#'

helpers/application_helper.rb

def link_to_add_fields(name, f, association, css_class = "add_fields btn btn-sm btn-info icon-plus")
  new_object = f.object.send(association).klass.new
  id = new_object.object_id
  fields = f.fields_for(association, new_object, child_index: id) do |builder|
    render(association.to_s.singularize + "_fields", f: builder)
  end
  link_to(name, '#', class: css_class, data: {id: id, fields: fields.gsub("\n", "")})
end

application.js

function remove_fields_(link) {
  $(link).prev("input[type='hidden']").val("true");
  $(link).closest(".fields").hide();
}

我做错了什么?有什么解决方法吗?

【问题讨论】:

  • 请发布您的代码。否则,任何人都无法帮助您。
  • 感谢阅读@EdCottrell。我已经编辑了我的原始帖子以添加代码。至少是它的简化版本:)

标签: javascript ruby-on-rails ruby-on-rails-4 railscasts


【解决方案1】:

在您的代码示例中没有看到 'accepts_nested_attributes_for :bars',请务必使用它。

【讨论】:

  • 谢谢。我的代码中也有这个,我只是忘了在这里复制它。我绝对可以创造记录。我唯一的问题是当我通过javascript“删除”嵌套记录时,当我点击保存时,它仍然在删除的记录上。
猜你喜欢
  • 1970-01-01
  • 2023-01-18
  • 2010-11-11
  • 2015-06-04
  • 2016-12-08
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多