Ruby on rails 远程真实表单上的活动存储。无效的真实性错误和错误的控制器格式

Ruby on rails 远程真实表单上的活动存储。无效的真实性错误和错误的控制器格式,ruby-on-rails,rails-activestorage,Ruby On Rails,Rails Activestorage,在将我的应用升级到Rails 5.2之后,我找到了一些时间来研究活动存储。按照指南,我安装了它并运行了必要的迁移 在我的用户模型上,我希望按照以下示例附加一个化身: 提交表单时收到的错误是ActionController::InvalidAuthenticityToken <%= form_for @user, remote: true do |f| %> <%# Other user fields redacted %> <div class="form

在将我的应用升级到Rails 5.2之后,我找到了一些时间来研究活动存储。按照指南,我安装了它并运行了必要的迁移

在我的用户模型上,我希望按照以下示例附加一个化身:

提交表单时收到的错误是
ActionController::InvalidAuthenticityToken

<%= form_for @user, remote: true do |f| %>
  <%# Other user fields redacted %>

  <div class="form-group">
    <%= f.label :avatar %>
    <%= f.file_field :avatar %>
  </div>

  <%= f.submit "Save", remote: true %>

<% end %>
用户#更新

关于为什么它被提交为HTML而不是JS,你有什么想法吗

编辑:表单标记

<form class="edit_user" id="edit_user_22" enctype="multipart/form-data" action="/users/22" accept-charset="UTF-8" data-remote="true" method="post">

经过多次尝试和错误后,使用Active Storage的直接上载功能才能使其正常工作。请允许我解释我的发现:

remote:true,multipart:true
不能很好地配合使用。有关更多详细信息,请参阅本文。实际上,您需要使用jQuery或gem远程提交文件

跟随这篇文章(直接上传)。似乎当你点击提交时;直接上载将捕获提交事件,并将文件直接提交到云服务器(或在我的开发人员的情况下提交到本地)。然后,它将在提交表单中使用该图像的引用,而不是提交实际图像


这击中了我的
用户#使用JS更新
,并成功连接了头像。

也过渡到活动存储并卡在这里。 但是(我记得)在我以前的实现中,我在使用的地方解决了(事实证明)相同的问题:

Rails.fire($("#form_id")[0], 'submit');
这是我从这个Q/a中得到的rails ujs方法:

正如我现在所了解到的,所有这些都来自以下事实:

直接调用form.submit()方法时不会引发事件-submit-,-MDN:
-
-
-


你检查过表单标记了吗?你能确认表单属性上确实有一个
dataremote=“true”
吗?是的,在我的帖子中添加了这个。只是添加-在我将活动存储添加到表单中之前,该表单工作得非常好。您的表单正在使用POST方法。尝试将
method::patch
添加到您的
form_for
tag是否可以在提交按钮上删除
remote:true
,然后重试?当在表单中将remote设置为true时,它总是运行到update.js.erb文件。无需格式化.js do…@NMPennypacker-在中添加
method::patch
,仍然会在表单标记中生成
method=“post”
。在我的浏览器中将其更改为
method=“patch”
,将导致表单尝试提交到显示操作@Dapeng114-从submit按钮中删除remote:true,不幸的是结果相同。感谢您提供有关format.js的提示!
<form class="edit_user" id="edit_user_22" enctype="multipart/form-data" action="/users/22" accept-charset="UTF-8" data-remote="true" method="post">
Rails.fire($("#form_id")[0], 'submit');