我有两个表格,可选remote: true;一个向create action发送Ajax请求,另一个向destroy action发送Ajax请求.

启用JavaScript时所有工作都会被罚款,但如果禁用JavaScript,然后单击,则会出现以下错误:

ActionController::InvalidAuthenticityToken PersonsController#create

显示此错误的原因,以及如何修复它?

注意:我使用的是Rails 4

使现代化

当我使用不带选项remote: true的普通表单时,rails会自动为身份验证令牌插入一个隐藏字段,但当我在表单中使用remote: true时,HTML代码中没有这样的字段.似乎当有remote选项时,Rails会以不同的方式处理身份验证令牌,那么我如何才能在这两种情况下都使用它呢?

推荐答案

奇怪的是,rails 4改变了这种行为.http://www.alfajango.com/blog/rails-4-whats-new/

Rails表单现在不会在表单中呈现CSRF字段,除非您明确将其定义为表单的选项:

<%= form_for @some_model, :remote => true, :authenticity_token => true do |f| %>
<% end %>

如果关闭Javascript,添加此选项可以让您优雅地降级为HTML回退.

Ruby-on-rails相关问答推荐

DELETE_IF和REJECT的意外行为!方法

Rails 7.1,登录到STDOUT和LOG/Production.log

Rails 创建自定义函数/方法以及存储位置

params.permit ruby​​3.2.1 更新后 Active::Record 的未定义方法=~

Ruby 3 动态关键字参数

无法在生产服务器上启动 Rails 4 控制台

Rails 和 jsonb 类型jsonb不存在

Rails Migration将字符串转换为整数?

PostgreSQL 无间隙序列

Rails:删除级联与依赖销毁

在 Rails 4 中检测用户代理 - 读取 HTTP 标头

Rails 3.0 中的 f.error_messages

Rails - 具有空数组的强参数

RubyMine - 关闭在空行中间单击的功能

Rails HABTM - 正确删除关联

Rspec:如何在控制器规范中分配实例变量

从任何编码强制字符串为 UTF-8

错误:无法在 Mavericks 上构建 gem 原生扩展

如何在 rake 任务中强制 RAILS_ENV?

Rails 3:乘客找不到Bundle 程序安装的 git gem