3

我掌握了 Rails 3 的窍门,并制作了几个工作应用程序。我不熟悉在 rails 中使用 javascript 或 jquery。我有一个使用 rails 3.2、devise 和 cancan 的工作应用程序。然后我将其转换为使用 Jquery Mobile。整个应用程序都在使用它,我没有区分桌面和移动。

问题:

总的来说,除了一些小事情外,一切都很好。一个是我可以使用正确的凭据成功登录,一旦登录,flash 将显示我已登录。如果我使用不正确的凭据登录,它只会显示一个Error loading page(没有像正常说的那样的 flash 消息Invalid email or password)。据我所知,所有其他 Flash 消息都正确显示(由 JQM 格式化为黄色)。

到目前为止我做了什么:

搜索高低搜索类似的问题,但没有快乐(最相似的是重定向或页面未找到错误)。在 Firebug 中显示401 Unauthorized - Response - Invalid email or password.

我已经注释掉了所有 cancan 的东西(它在没有 JQM 的情况下都可以工作) - 这没有区别 - 并不是它正在重定向到没有权限等的其他地方。

我不太熟悉 javascript/ajax 如何改变正常的 rails 行为,但任何指针都将不胜感激。

4

1 回答 1

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 返回响应并适当地处理它们。

于 2013-01-30T02:18:05.197 回答