0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

7.4 ユーザー登録成功

Posted at

ユーザーを保存できるようにします。
保存に成功すると、ユーザー情報は自動的にデータベースに登録されます。
次にブラウザの表示をリダイレクトして、登録されたユーザーのプロフィールを表示します。
ついでにウェルカムメッセージも表示しましょう

保存とリダイレクトを行う、userのcreateアクション

app/controllers/users_controller.rb
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
ウェルカムメッセージ表示
二度目は表示しないように

ユーザー登録ページにフラッシュメッセージを追加する

app/controllers/users_controller.rb
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サイトのレイアウトに追加する

app/views/layouts/application.html.erb
<!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を埋め込む

app/views/layouts/application.html.erb
<!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(出力したいタグ,表示させたい内容 , クラス名(変数展開も出来る))

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?