Rails嵌套表单不向服务器发送任何参数

时间:2016-06-07 21:11:31

标签: ruby-on-rails forms

我尝试使用simple_formfields_for循环遍历对象集合并创建必要的字段。但是,在提交表单时,根本不会向服务器处理任何参数。因此,我在提交时收到ActionController::InvalidAuthenticityToken错误。我已经在控制器内部深入挖掘并豁免检查CSRF请求,只是为了达到强大的params方法。果然没有传递表格中的任何参数。

在绕过真实性检查以查看正在进行的操作之后,我得到了

{"controller"=>"object", "action"=>"update", "format"=>"12"}

查看服务器日志,它不会传递任何参数,包括真实性令牌,字段等,并说

Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity

我按照https://tools.ietf.org/html/rfc4918#section-11.2阅读了422,但我不确定为什么会这样。也许它来自下面的第3行?

这是表单的标记:

<%= simple_form_for(@object, url: update_related_object_object_path(@object)) do |f| %>
  <% @object.related_objects.each do |related_object| %>
    <%= f.simple_fields_for 'related_objects[]', related_object do |ff| %>
      <%= ff.text_field :prop1 %>
      <%= ff.input_field :prop2 %>
    <% end %>
  <% end %>

  <%= f.submit 'Update object' %>
<% end %>

这就是文本字段的样子:

<input type="text" value="Send me please" name="object[related_object][12][prop1]" id="object_related_objects_12_prop1">

@object模型中,我允许像这样的attrs params:

  accepts_nested_attributes_for :related_object,
    allow_destroy: true,
    reject_if: :all_blank

我甚至尝试将此作为ajax请求并且同样的问题也适用。如果我添加remote: true然后检查参数,我会遇到与上面相同的问题。

0 个答案:

没有答案