我尝试使用simple_form
和fields_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
然后检查参数,我会遇到与上面相同的问题。