2011-08-23 49 views
3

我从Rails的2.3升级我的应用程序的过程到Rails 3.我读,我需要插入的Rails 3 CSRF_meta_tag不正常

<%= csrf_meta_tag%>

在我的布局,我做的。不幸的是,当我使用ajax请求时,我一直在注销。经过一番研究,我发现一个较旧的方法是在我的application.js文件中添加

$j(document).ajaxSend(function(e, xhr, options) { 
    var token =$j("meta[name='csrf-token']").attr("content"); 
    xhr.setRequestHeader("X-CSRF-Token", token); 
}); 

。它现在正常工作(看来我其实不需要csrf_meta_tag)。

这是正常的,我不得不添加这4行代码在我的application.js而不是只是csrf_meta_tag,或者我只是失去了一些东西?

回答

6

首先,您确实需要csrf_meta_tag。如果您不在布局中使用它,csrf-token meta将不会生成,那么您的application.js修复程序将停止工作。

jquery-ujs宝石(jQuery的铁轨)应该照顾这个给你。有可能您使用的版本有一些错误。 (我记得3.0.x中有一个相关的错误,但不记得确切的问题)。尝试更新jquery-ujs并重新生成jquery(rails generate jquery:install),移除rails.js以查看问题是否得到解决。

附加说明:从rails 3.1开始,csrf_meta_tag已重命名为csrf_meta_tags,但前者仍可使用。

请参阅github上的jquery-ujs

+0

对不起,我有点困惑:我找不到任何jquery-ujs gem(将它添加到我的Gemfile中,找不到它,运行rails generate query:install说它找不到生成器查询:安装)。它是否带有导轨?什么是Jquery-urj? – alex

+0

我的不好。它叫做jquery-ujs,但是它的名字是jquery-rails。请参阅https://github.com/rails/jquery-ujs。请按照其自述。 jquery-urj是一个错字我要更新答案。 –

+0

另一个错误是,生成命令是真的“导致生成jquery:安装” – dgmdan