通过多次尝试和错误,我将问题缩小到下面的第5行.由于某种原因,.js响应结束了用户会话.使用3.0.4和设计1.1.7(和jQuery 1.5).
此外,@organization正在更新,并且完成200 OK在日志中显示,所以用户不知道他/她已经注销,直到尝试下一个操作.
任何帮助和指导非常感谢.
*Controller* 1 def make_featured 2 @organization = Organization.find(params[:id]) 3 @organization.is_featured ? @organization.update_attribute(:is_featured,"false") : @organization.update_attribute(:is_featured,"true") 4 respond_to do |format| 5 format.js {render :action => "update",:layout => false} 6 end 7 end
和
*update.js.haml* $("#organization_" + "#{@organization.id}" ).replaceWith("#{ escape_javascript(render :partial => 'users/supplier_view',:locals => {:organization => @organization}) }");
解决方法
非常感谢来自Devise Google Group的Brandon Martin,指出我正确的方向…
这是Rails 3.0.4安全修复的结果.
http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails
从这个博客文章开始一小时左右的工作后,这里有一些别人的提示…
>这已经在rails.js中修复了 – 所以你不必劫持,修补或重新发明车轮.
>如果你正在使用rails.js开箱即用,更新它 – rake rails:update(我想,但是我使用了一个定制的rails.js文件)
>如果您正在使用自定义的rails.js文件,请将源代码添加到最新版本:https://github.com/fermion/jquery-ujs/blob/master/src/rails.js
将你的csrf_Meta_tag帮助器放在你的javascript_include_tags之上
希望有帮助!