0

Railsの使用3。

通常のアプリでは、ユーザーがログインしている場合にのみフォームが表示されます。次に、コントローラーで、新しいレコードを保存する前に、認証について別のチェックを実行します。

ただし、ログインしているかどうかに関係なく、すべてのユーザーにフォームを表示したいと思います。訪問者が添付ファイルなどを使用してフォームを送信すると、ユーザーがログインしているかどうかが確認されます。ログインしていない場合は、ログインにリダイレクトされます。 / signupページ、そして彼がそれを完了すると、新しいレコードが保存されます。

これはとで達成できることは理解してcreatesaveますが、誰かがこれを達成する方法についてより明確な説明で詳しく説明できますか?

4

2 に答える 2

1
  • ユーザーがフォームを送信
  • コントローラは、ユーザーがログインしていないことを確認します
  • コントローラは送信されたフォームをデータベースに保持します
  • コントローラは新しいオブジェクトのIDでCookieを設定します
  • コントローラはログインにリダイレクトします
  • ユーザーがログインします
  • コントローラは、データベースから永続化されたフォーム情報を取得します
  • コントローラがオブジェクトをユーザーに割り当てます

定期的なジョブを実行して、要求されていない古いフォームデータをクリーンアップします。

于 2012-07-04T15:30:06.797 に答える
0

さて、ビューでは、ログインチェックなしで常にフォームを表示します。ここで注意が必要なのは、ユーザーがログインにリダイレクトされる前に送信したデータを保存することです。

1つの解決策は、投稿データをCookieに保存し、ログイン後にユーザーを同じページにリダイレクトして、作成を再度トリガーすることです。

コントローラーでは、説明したとおりに実行します。

class ThingController
  def create
    if user_logged_in?
      if cookie[:stuff]
        # create the stuff from cookie and remove it
      else
        # create the stuff
      end
    else
      # redirect him to login with a callback to this same place        
    end
  end
end
于 2012-07-04T15:35:11.997 に答える