未在表单提交中添加嵌套字段

杰克·奥康纳

我正在使用茧宝石尝试实现添加一个对象,该对象属于另一个具有嵌套字段的对象。我有一个“用户解析度”,其中包含许多“里程碑”。我在这两个模型中都相应地设置了关联。由于某些原因,无法创建里程碑,但是,如果我在数据库中手动添加一个里程碑,则可以成功更新它。我能够动态添加字段并使用茧形宝石将其删除,仅此而已。当我单击“添加里程碑”时,它会将我重定向到用户分辨率的显示视图,并抛出成功消息,提示用户分辨率已更新,未引发任何错误,但未创建里程碑。

user_resolution.rb

has_many :milestones
accepts_nested_attributes_for :milestones, reject_if: :all_blank, allow_destroy: true

Milestone.rb

belongs_to :user_resolution

我已经在编辑视图中设置了嵌套表单,因为现在我只希望用户在编辑视图中为解决方案添加里程碑。

user_resolutions / edit.html.erb

<%= form_for(@user_resolution) do |f| %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>

    <%= f.fields_for :milestones do |milestone| %>
      <%= render 'milestone_fields', f: milestone %>
    <% end %>

    <%= link_to_add_association 'Add Milestone', f, :milestones %>
    <%= f.submit "Add Milestone" %>

<% end %>

_milestone_fields.html.erb

<div class="nested-fields">
   <div class="field-row">
       <%= f.label :name, 'Name' %>
       <%= f.text_field :name %>
   </div>
   <div class="field-row">
       <%= f.label :description, 'Name' %>
       <%= f.text_area :description %>
   </div>
   <div class="field-row">
       <%= f.label :severity, 'severity' %>
       <%= f.check_box :severity %>
   </div>
   <div class="field-row">
       <%= f.label :target_date, 'target_date' %>
       <%= f.date_select :target_date %>
   </div>

   <%= link_to_remove_association 'Remove', f %>

</div>

用户分辨率控制器中允许的参数还包含以下内容

milestones_attributes: [:id, :user_resolution_id, :name, :description, :target_date, :severity, :complete, :_destroy]

里程碑本身没有视图,它们只有模型和控制器。控制器的create动作(我不确定嵌套表单是否需要)包含以下标准代码

def create
    @milestone = Milestone.new(milestone_params)

    if @milestone.save
        redirect_to user_resolutions_path, 
        :flash => { :success => "You successfully created a milestone" }
    else
        redirect_to new_milestone_path, 
        :flash => { :error => "Oops something went wrong. Try again." }
    end
end

我一直在提供尽可能多的信息,但是如果您需要其他任何信息,请告诉我。谢谢你们。

理查德·派克

我不确定嵌套表单是否需要

您不需要执行任何create操作milestones-它们将从user_resolutions#create控制器操作中填充

有几件事情要看。我会在这里详细说明。这不是一个具体的答案,但可能会帮助您指出正确的方向。


首先,您需要确保接收正确的params

Cocoon 在构建嵌套表单方面做得非常好-您需要确保它使用Rails的嵌套属性结构。

为此,您应该right-click > view source

在该f.fields_for部分(在HTML中不会称为),您将查找与以下内容等效的内容:

<input type="text" name="milestones_attributes[0][name]" value="">

要注意的重要事项是名称...

每当您使用表单或任何Rails视图帮助器时,您实际上只是在构建标准HTML。form_for只是创建一个HTML表单,因此其中包含的所有参数都需要遵循一定的结构,Rails才能识别这些参数。

f.fields_for通常将调用这些元素-将其x_attributes[:id][:param]传递给Rails,Rails会循环遍历每个元素[:id]以确定要添加的嵌套参数的数量。

您需要检查上述命名结构的来源。如果您看到它,那很好。如果不是,则表明您尚未正确构建表单。


其次,您需要确保在Controller构建对象

我不确定这样Cocoon如何,但是从本质上讲,每次使用时f.fields_for,您都必须在构建关联对象之前:

def new
    @user_reservation = UserReservation.new
    @user_reservation.milestones.build #-> this is what makes f.fields_for work
end

如果第一步显示的元素命名不正确,则表明您的关联对象未构建(这就是为什么无法识别它们的原因)。

要对其进行测试,您应该在发送之前方法中构建关联对象


最后,您需要发布params

这些明确地告诉您Rails对嵌套属性的处理方式,从而使您能够确定它们发生了什么。

很抱歉,答案很长。无论如何,您都不会收到任何答案,因此,给您一些东西是我的明智之举。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Laravel LiveWire属性嵌套绑定未在表单字段中显示值

来自分类Dev

如果未在表单中单击按钮,如何防止表单提交

来自分类Dev

Rails 4嵌套表单未在参数中传递嵌套属性

来自分类Dev

Rails 4嵌套表单未在参数中传递嵌套属性

来自分类Dev

字段会动态添加到表单中,但不会提交给服务器

来自分类Dev

Rails表单两次提交嵌套字段

来自分类Dev

清除Angular表单提交中的输入字段?

来自分类Dev

提交表单中的多个字段(PHP)

来自分类Dev

此字段在角度表单提交中是必需的

来自分类Dev

如何通过Rails中的JS动态添加新的嵌套字段以形成表单?

来自分类Dev

Symfony2-以嵌套形式从子表单中添加或删除字段

来自分类Dev

使用动态嵌套表单在编辑页面中添加新字段

来自分类Dev

Symfony2-以嵌套形式在子表单中添加或删除字段

来自分类Dev

表单未在laravel中提交?

来自分类Dev

未在 Window 上提交表单

来自分类Dev

以PHP表单添加更多字段并提交

来自分类Dev

提交表单后,为外键字段添加pk

来自分类Dev

使用ng-repeat动态添加字段时提交的表单

来自分类Dev

Rails 4中的嵌套表单未在视图中呈现

来自分类Dev

提交按钮未在表单上提交

来自分类Dev

将搜索扩展到表单提交上的URL,并将字段值添加到URL字符串中

来自分类Dev

在MeteorJS中动态添加表单字段

来自分类Dev

在opencart产品表单中添加字段

来自分类Dev

在AngularJS中,如何防止嵌套的<button>提交其所在的表单?

来自分类Dev

在提交表单时进行表单验证时,组件未在React中更新

来自分类Dev

为什么添加的模拟模块未在嵌套的beforeEach中执行

来自分类Dev

当我尝试在 Rails 5 中添加占位符关联记录时,嵌套字段表单出现错误

来自分类Dev

CKEDITOR 字段中的文本未在第一次提交中提交

来自分类Dev

提交带有不在模型中的字段的Rails表单

Related 相关文章

  1. 1

    Laravel LiveWire属性嵌套绑定未在表单字段中显示值

  2. 2

    如果未在表单中单击按钮,如何防止表单提交

  3. 3

    Rails 4嵌套表单未在参数中传递嵌套属性

  4. 4

    Rails 4嵌套表单未在参数中传递嵌套属性

  5. 5

    字段会动态添加到表单中,但不会提交给服务器

  6. 6

    Rails表单两次提交嵌套字段

  7. 7

    清除Angular表单提交中的输入字段?

  8. 8

    提交表单中的多个字段(PHP)

  9. 9

    此字段在角度表单提交中是必需的

  10. 10

    如何通过Rails中的JS动态添加新的嵌套字段以形成表单?

  11. 11

    Symfony2-以嵌套形式从子表单中添加或删除字段

  12. 12

    使用动态嵌套表单在编辑页面中添加新字段

  13. 13

    Symfony2-以嵌套形式在子表单中添加或删除字段

  14. 14

    表单未在laravel中提交?

  15. 15

    未在 Window 上提交表单

  16. 16

    以PHP表单添加更多字段并提交

  17. 17

    提交表单后,为外键字段添加pk

  18. 18

    使用ng-repeat动态添加字段时提交的表单

  19. 19

    Rails 4中的嵌套表单未在视图中呈现

  20. 20

    提交按钮未在表单上提交

  21. 21

    将搜索扩展到表单提交上的URL,并将字段值添加到URL字符串中

  22. 22

    在MeteorJS中动态添加表单字段

  23. 23

    在opencart产品表单中添加字段

  24. 24

    在AngularJS中,如何防止嵌套的<button>提交其所在的表单?

  25. 25

    在提交表单时进行表单验证时,组件未在React中更新

  26. 26

    为什么添加的模拟模块未在嵌套的beforeEach中执行

  27. 27

    当我尝试在 Rails 5 中添加占位符关联记录时,嵌套字段表单出现错误

  28. 28

    CKEDITOR 字段中的文本未在第一次提交中提交

  29. 29

    提交带有不在模型中的字段的Rails表单

热门标签

归档