我正在掌握 Rails 3 的窍门,并制作了几个可用的应用程序。我是在 Rails 中使用 javascript 或 jquery 的新手。我有一个使用 Rails 3.2、devise 和 cancan 的工作应用程序。然后我将其转换为使用 Jquery Mobile。整个应用程序都在使用它,我不区分桌面和移动设备。
Problem:
总的来说,除了一些小问题之外,一切都运行良好。一是我可以使用正确的凭据成功登录,并且一旦登录,闪存将显示我已登录。如果我使用不正确的凭据登录,它只会显示Error loading page
(没有像平常那样的闪现消息说Invalid email or password
)。据我所知,所有其他 Flash 消息都正确显示(由 JQM 格式化为黄色)。
到目前为止我所做的:
到处搜索类似的问题,但没有喜悦(最相似的是重定向或页面未找到错误)。
在 Firebug 中显示401 Unauthorized - Response - Invalid email or password
.
我已经注释掉了所有 cancan 的东西(它在没有 JQM 的情况下都可以工作) - 这没有什么区别 - 这并不是说它正在重定向到其他没有权限的地方等。
我不太熟悉 javascript/ajax 如何改变正常的 Rails 行为,但任何指针将不胜感激。
简答
解决这个问题最快的方法是使用rails g devise:views
将设计视图复制到您的项目中,以便您可以编辑它们。然后您需要将以下内容添加到form_for
紧随其后的行:url
in the new.html
会话控制器的模板:
:html => {:data => {:ajax => 'false'}}
这将告诉 jQuery Mobile 该表单不应被劫持并制成 ajax 请求。
原因
jQuery Mobile 将劫持所有表单和链接,将其转换为 ajax 请求。除非你设置了一个respond_to
控制器中的块 Rails 仍将呈现您设置的任何模板。这通常不是问题,因为 jQM 只是解析出必要的页面 div。然而,Devise 的控制器will根据请求做出不同的响应,并且您收到 jQM 不知道如何处理的 ajax 响应。这就是为什么上面最简单的解决方案是让 jQM 不将登录表单转换为 ajax 请求。其他潜在的解决方案包括修改会话控制器或添加默认的 ajax 成功处理程序代码来检查非状态 200 返回响应并适当处理它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)