【63日目】【1日20分のRailsチュートリアル】【第7章】ユーザー登録フォームを完成させる
今日は「7.4 ユーザー登録成功」から。
7.4 ユーザー登録成功
まずは、ユーザーを保存できるようにします。保存に成功すると、ユーザー情報は自動的にデータベースに登録されます。
次にブラウザの表示をリダイレクトして、登録されたユーザーのプロファイルを表示します。
この項でユーザー登録フォームは完成、かな。
7.4.1 登録フォームの完成
現状では、有効な情報で送信するとエラーが発生してしまいます。
メールアドレスやパスワードなど有効なユーザー情報を入力してボタンをクリック。
エラー画面が表示されました。
users/create
のテンプレートないよ、って言われました。
createアクションにビューはないですね。。。
ユーザー登録に成功した場合は、ページを描画するのではなく別のページにリダイレクトするようにしてみましょう。
ルートURLにリダイレクトしてもよいですが、一般的な慣習にしたがって、新しく作成されたユーザーのプロフィールページにリダイレクトしてみます。
ユーザー登録に成功したとき(if @user.save
)にユーザーのプロフィールページにリダイレクトするショルを追加。
app/controllers/users_controller.rb
: def create @user = User.new(user_params) if @user.save redirect_to @user else :
redirect_to @user
は
redirect_to user_url(@user)
と等価だそう。
redirect_to @userというコードからuser_url(@user)といったコードを実行したいことを(自動的に)推察してくれた結果になります。
便利なのでそういうもの、って覚えておくか。。。
7.4.2 flash
登録完了後に表示されるページにメッセージを表示し (この場合は新規ユーザーへのウェルカムメッセージ)、2度目以降にはそのページにメッセージを表示しないようにするというものです。 Railsでこういった情報を表示するためには、flashという特殊な変数を使います。
変数が用意されてる?のはいいですね。自分でフラグ用意したりしなくていいんだ。。。。
さっき追加したリダイレクトの処理の前にコードを追加。
app/controllers/users_controller.rb
flash[:success] = "Welcome to the Sample App!"
Bootstrap CSSは、このようなflashのクラス用に4つのスタイルを持っています (success、info、warning、danger)。
flashはタイプに応じて使い分けができるのかー。
flash変数の内容をWebサイト全体で表示できるように、アプリケーション共通のViewに下記を追加。
app/views/layouts/application.html.erb
<% flash.each do |message_type, message| %> <div class="alert alert-<%= message_type %>"><%= message %></div> <% end %>
これでユーザー登録後のメッセージもOKなはず。
今日の作業時間は【24分】。
次は「7.4.3 実際のユーザー登録」から。