0

Ruby on Rails アプリで次の状況があります。

  • ユーザーがフォーム (コメント) に入力すると、認証方法 (openId、Twitter、Facebook など) を選択できる omniauth ページが表示されます。
  • omn​​iauth が入力され、成功したユーザーが戻ると、セッションが取得され、最初のフォーム データが処理されます (コメントが公開されます)。

私はすべてうまくいきますが、私の論理が醜い方法であると考えていることを除いて。これで、SessionsController認証の成功に関するコメントが作成されます。

このようなものを分離する良い方法は何ですか? Commentモジュールは SessionsController にフックする (リッスンする)必要がありますか? CommentsControllerまたは、SessionsController は単にorクラスでいくつかのメソッドを呼び出して、Comment認証の成功に関するコメントを保存する必要がありますか? この種の問題を解決するために、慣れることができるパターンはありますか?

4

1 に答える 1

0

継承またはモジュールを使用するコントローラー間で機能を共有している場合、あるコントローラーを別のコントローラーから呼び出すことは必ずしも良い習慣ではないと思います。あなたの特定の問題については、次のようにします。

  1. 認証されていないユーザーが /comments/create に投稿
  2. before フィルタが認証をチェックし、コメント パラメータ ハッシュと成功リダイレクトの場所をセッションに保存してから、/session/new にリダイレクトします。
  3. 認証に成功すると、セッション コントローラーは params ハッシュをチェックし、格納されたパスにリダイレクトする前に遅延モデルを作成します。

別のリクエストから POST できれば素晴らしいことですが、残念ながらできません。そのため、ロジックをセッション コントローラーに配置する必要があります。

于 2011-03-08T14:48:37.920 に答える