ユーザーを保存できるようにします。
保存に成功すると、ユーザー情報は自動的にデータベースに登録されます。
次にブラウザの表示をリダイレクトして、登録されたユーザーのプロフィールを表示します。
ついでにウェルカムメッセージも表示しましょう
保存とリダイレクトを行う、userのcreateアクション
class UsersController < ApplicationController
.
.
.
def create
@user = User.new(user_params)
if @user.save
redirect_to @user
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
end
redirect_to メソッドに注目
redirect_to user_url(@user)と等価
###7.4.2 flash
ウェルカムメッセージ表示
二度目は表示しないように
ユーザー登録ページにフラッシュメッセージを追加する
class UsersController < ApplicationController
.
.
.
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
end
flash変数の内容をWebサイトのレイアウトに追加する
<!DOCTYPE html>
<html>
.
.
.
<body>
<%= render 'layouts/header' %>
<div class="container">
<% flash.each do |message_type, message| %>
<div class="alert alert-<%= message_type %>"><%= message %></div>
<% end %>
<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
</div>
.
.
.
</body>
</html>
Bootstrap CSSは、このようなflashのクラス用に4つのスタイルを持っています(success、info、warning、danger)
sucess dengerの場合
flash = { success: "It worked!", danger: "It failed." }
###7.4.3 実際のユーザー登録
ここまでの変更がうまくいったかどうか確認するため、実際にサンプルアプリケーションでユーザー登録を試す
まずはデータベースの内容を一旦リセット
rails db:migrate:reset
##7.4.4 成功時のテスト
ここで一旦、有効な送信に対するテストを書く
これにより今後バグが埋め込まれたらそれを検知できるようになる
assert_differenceというメソッドを使ってテストを書く
content_tagを使ってレイアウトの中にflashを埋め込む
<!DOCTYPE html>
<html>
.
.
.
<% flash.each do |message_type, message| %>
<%= content_tag(:div, message, class: "alert alert-#{message_type}") %>
<% end %>
.
.
.
</html>
Railsのcontent_tagというヘルパーを使ってる
#content_tag(出力したいタグ,表示させたい内容 , クラス名(変数展開も出来る))