Ruby on rails 远程真实表单上的活动存储。无效的真实性错误和错误的控制器格式
在将我的应用升级到Rails 5.2之后,我找到了一些时间来研究活动存储。按照指南,我安装了它并运行了必要的迁移 在我的用户模型上,我希望按照以下示例附加一个化身: 提交表单时收到的错误是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
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');