我正在掌握Rails 3,并制作了几个有用的应用程序。我是新手使用javascript或jquery与rails。我有一个工作的应用程序与rails 3.2,设计和cancan。然后我将其转换为使用Jquery Mobile。整个应用程序正在使用它,我没有区分桌面和移动。
问题:
总的来说,除了一些小东西外,一切都很好。一个是我可以使用正确的凭据成功登录,一旦登录闪存就会显示我已登录。如果我使用不正确的凭据登录,它只显示Error loading page
(没有像{{1 }})。据我所知,所有其他flash消息都正确显示(黄色由JQM格式化)。
到目前为止我做了什么:
搜索类似问题的高低,但没有快乐(最相似的是重定向或页面未找到错误)。
在Firebug中,它显示Invalid email or password
。
我已经注释掉了所有的cancan东西(它们都在没有JQM的情况下工作) - 这没有任何区别 - 并不是它重定向到没有权限等的其他地方。
我不熟悉javascript / ajax如何改变正常的rails行为,但任何指针都会受到赞赏。
答案 0 :(得分:3)
解决此问题的最快方法是使用rails g devise:views
将设计视图复制到项目中,以便编辑它们。然后,您需要在会话控制器的form_for
模板中:url
之后的new.html
行添加以下内容:
:html => {:data => {:ajax => 'false'}}
这将告诉jQuery Mobile这个表单不应该被劫持并变成ajax请求。
jQuery Mobile将劫持所有表单和链接,将其转换为ajax请求。除非您在控制器中设置respond_to
块,否则Rails仍将呈现您设置的任何模板。这通常不是问题,因为jQM只是解析必要的页面div。但是,Devise的控制器将根据请求做出不同的响应,并且您正在接收jQM不知道如何处理的ajax响应。这就是为什么上面最简单的解决方案是让jQM不将登录表单转换为ajax请求。其他可能的解决方案包括修改会话控制器或添加代码默认的ajax成功处理程序,以检查非状态200返回响应并正确处理它们。