SUPARUTAN ENGINEER BLOG

〜33歳 文系営業マンの格闘家がエンジニアになる話〜

deviseまとめ

 

・gem devise 導入

 

・gem devise install

 

 

・新規登録とログインのリンクが完成

 

・before action をルーティングに記載

 

・DB作成

 

・モデル作成し・マイグレート編集(カラムの型・名前に注意)

 

・erb  をhamlに変更

 

 

・devise registration に会員登録画面のビュー作成(form forで次のアクションに飛んでくれる)

 

・devise session ログイン画面も実装

 

通常ここで完了

 

ウィザード形式で住所登録させて保存するとき

 

 

・住所モデルの作成

・マイグレートでカラム作成してDBマイグレート

・アソシエーション・バリデーション設定

 

 

・deviseの管理下にusersコントローラー作成

rails g devise:controllers users

 

 

 

・ルーティング変更

ails.application.routes.draw do
  devise_for :users, controllers: {
    registrations: 'users/registrations',
  }
  root to: "home#index"
end

 

devise registrationを継承しているusersコントローラー作成

 

・newアクションのファイルを作成(住所登録ね)

 

・createアクションも設定

1ページ目の内容のバリデーションチェック・セッションに保持させる。

住所登録インスタンスを生成・当該ぺーじへの遷移

class Users::RegistrationsController < Devise::RegistrationsController

# 省略

  def create
    @user = User.new(sign_up_params)
    unless @user.valid?
      flash.now[:alert] = @user.errors.full_messages
      render :new and return
    end
    session["devise.regist_data"] = {user: @user.attributes}
    session["devise.regist_data"][:user]["password"] = params[:user][:password]
    @address = @user.build_address
    render :new_address
  end

# 省略

  protected

# 省略

end

 

スコープ

 

  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
  devise_scope :user do
    get 'addresses', to: 'users/registrations#new_address'
    post 'addresses', to: 'users/registrations#create_address'
  end
  root to: "home#index"
end

 

住所登録のビュー作成

 

 

住所のバリデーション

clearでセッション削除

ログイン完了画面作成

 

お疲れ様でした、

ウィザード形式、まる覚えしなくてもいいですよね。