我有一个控制器,它使用
AJAX for CRUD,但是当我点击我的一个远程链接(例如删除),我看到rails服务器已经决定登录并重定向我.服务器日志的检查表明它无法验证CSRF真实性.如何在我的请求中包含CSRF令牌?
运行:
– Rails 3.1
– 设计1.4.4
– jquery-rails 1.0.13
相关控制器操作:
def destroy @article = Article.find(params[:id]) if @article.destroy flash[:notice] = "Article deleted." respond_to do |format| format.html{redirect_to articles_path} format.js{} end else flash[:error] = "Try Again." redirect_to :back end
布局/ application.html.erb
<head> <title><%= content_for?(:title) ? yield(:title) : "Untitled" %></title> <link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap-1.1.1.min.css> <%= stylesheet_link_tag "application" %> <%= javascript_include_tag :defaults %> <script type="text/javascript">jQuery.ajaxSetup({ beforeSend: function (xhr) { xhr.setRequestHeader("Accept","text/javascript"); } });</script> <%= csrf_Meta_tag %> <%= yield(:head) %> </head>
提前致谢.
解决方法
Rails 3.1使用gem’jquery-rails’,它希望你在你的application.js文件中有这个:
//= require jquery //= require jquery_ujs
我忘记了jquery_ujs,并且和你一样遇到了同样的问题.