Jquery Mobile Rails&使用不正确的凭据登录时设计错误加载页面

时间:2012-09-08 08:55:58

标签: jquery ruby-on-rails-3 mobile devise

我正在掌握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行为,但任何指针都会受到赞赏。

1 个答案:

答案 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返回响应并正确处理它们。