3

Rails 3のコツをつかんで、いくつかの動作するアプリを作成しました。Railsでjavascriptまたはjqueryを使用するのは初めてです。Rails 3.2、devise、cancanを備えた動作するアプリがあります。次に、JqueryMobileを使用するように変換しました。アプリ全体がそれを使用しています。私はデスクトップとモバイルを区別しませんでした。

問題:

一般的に、いくつかの小さなことを除いて、すべてが正常に機能しています。1つは、正しいクレデンシャルで正常にログインでき、フラッシュにログインすると、サインインしていることを示します。間違ったクレデンシャルでログインすると、Error loading page(通常のようなフラッシュメッセージは表示されませんInvalid email or password)と表示されます。他のすべてのフラッシュメッセージは、私が見る限り正しく表示されています(JQMによって黄色でフォーマットされています)。

私がこれまでにしたこと:

同様の問題を高低で検索しましたが、喜びはありません(最も類似しているのは、リダイレクトまたはページが見つからないというエラーです)。Firebugではそれが表示され401 Unauthorized - Response - Invalid email or passwordます。

私はすべてのcancanのものをコメントアウトしました(それはすべてJQMなしで機能しています)-そしてそれは違いはありません-それは許可のない他の場所にリダイレクトしているということではありません。

私はjavascript/ajaxが通常のレールの動作をどのように変更するかについてはあまり詳しくありませんが、ポインタをいただければ幸いです。

4

1 に答える 1

3

簡潔な答え

これを解決する最も簡単な方法は、deviserails g devise:viewsのビューをプロジェクトにコピーして編集できるようにすることです。次に、セッション コントローラーのテンプレートのform_forの直後の行に次を追加します。:urlnew.html

:html => {:data => {:ajax => 'false'}}

これにより、このフォームをハイジャックして ajax リクエストにするべきではないことが jQuery Mobile に通知されます。

理由

jQuery Mobile は、すべてのフォームとリンクをハイジャックして、それらを ajax リクエストに変換します。コントローラーにブロックを設定しない限り、respond_toRails は設定したテンプレートをレンダリングします。jQM は必要なページ div を解析するだけなので、これは通常は問題になりません。ただし、Devise のコントローラーリクエストに基づいて異なる応答をし、jQM が処理方法を知らない ajax 応答を受け取ります。これが、上記の最も簡単な解決策が、jQM がサインイン フォームを ajax リクエストに変換しないようにすることである理由です。その他の潜在的な解決策には、セッション コントローラーを変更するか、コードをデフォルトの ajax 成功ハンドラーに追加して、ステータス 200 を返さない応答をチェックし、それらを適切に処理することが含まれます。

于 2013-01-30T02:18:05.197 に答える