【Ruby】三項演算子
内容
経緯
三項演算子が
Devise::RegisterController#after_update_path_for
に現れて調べたため備忘録
三項演算子とは
A ? B : C
は
if 条件式A B #(条件式Aがtrueの時の処理) else C #(条件式Bがfalseの時の処理) end
と同義です。
三項演算子を用いる際の注意点
注意点① : コロン:
前後のスペース のつけ忘れの注意
Rubyの言語仕様のためコロン:
前後のスペース を忘れるとSyntax Errorになります
注意点② : 三項演算子のあとでさらにif文を追加するとカオスになる
ネストしないif else end
の簡略化にはいいですが、
複数if文がある場合は見づらくなるかも
参考
・【Ruby】 三項演算子をマスターしてコードを簡潔に書けるようにしよう。 | Pikawaka - ピカ1わかりやすいプログラミング用語サイト
・Rubyの三項演算子の話 - Qiita
・条件演算子 - 演算子式 (Ruby 3.0.0 リファレンスマニュアル)
【Rails】devise - アカウント作成・更新後のリダイレクト遷移先をカスタマイズする
内容
Ruby on Railsのgem 'devise'
で
アカウント作成・更新した後のリダイレクト遷移先のパスの変更の方法
前提
① deviseの登録・認証を使用するモデル設定
$ rails g devise User
② deviseのコントローラのルーティング
Rails.application.routes.draw do devise_for :users, controllers: { registrations: 'registrations', }
デフォルト設定
devise本家では
アカウント作成した後のデフォルトのリダイレクト遷移先は
次のように定義されています
いつ | デフォルトの遷移先パス | 遷移先パスを定義しているメソッド |
---|---|---|
アカウント作成後 (Devise::RegistrationsController#create) |
after_sign_in_path_for(resource) と同じパス |
after_sign_up_path_for(resource) |
アカウント更新後 (Devise::RegistrationsController#update) |
signed_in_root_path(resource) かnew_session_path(resource) (条件分岐) |
after_update_path_for(resource) |
カスタマイズ
デフォルトの遷移先パスから変更したい場合は、
ソースコードで定義されている
・after_sign_in_path_for
メソッド
・after_update_path_for
メソッド
をオーバーライドします
カスタマイズの例
class RegistrationsController < Devise::RegistrationsController protected def after_update_path_for(resource) user_path(resource) end def after_sign_up_path_for(resource) users_path end end
【Rails】devise - ログイン・ログアウト後のリダイレクト先をカスタマイズする
内容
Ruby on Railsのgem 'devise'
で
ログイン・ログアウトした後のリダイレクト遷移先のパスの変更の方法
デフォルト設定
devise本家では
デフォルトのログイン・ログインした後のリダイレクト遷移先は
次のように定義されています
いつ | デフォルトの遷移先パス | 遷移先パスを定義しているメソッド |
---|---|---|
ログイン後 (Devise::SessionsController) |
root_path | after_sign_in_path_for(resource) |
ログアウト後 (Devise::SessionsController#respond_to_on_destroy) |
root_path | after_sign_out_path_for(resource) |
カスタマイズ
デフォルトの遷移先パスから変更したい場合は、
ソースコードで定義されている
・after_sign_path_for
メソッド
・after_sign_out_path_for
メソッド
をオーバーライドします
カスタマイズの例
class SessionsController < Devise::SessionsController protected def after_sign_in_path_for(resource) users_path end def after_sign_out_path_for(resource) flash[:notice] = "ログアウトしました" # flashメッセージの追加もできます root_path end end
【Rails】devise - モジュールの追加方法
経緯
・アカウント作成機能・ログイン機能の実装のまとめ・整理・備忘録
内容
Ruby on Railsのgem 'devise'
の
モジュール追加の方法
deviseのモジュール
deviseのモジュールの使用方法
前準備
deviseの前準備が完了済みとします
migrationファイルで使用するモジュールのコメントアウトを解除
$ rails g devise User
を実行したときに作成されるmigrationファイルdb/migrate/yyyymmddhhmmdd_devise_create_users.rb
で
使用するモジュールのコメントアウトを解除
: confirmableモジュールを使いたいのでコメントアウト解除
class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :users, id: false do |t| t.string :id, limit: 36, null: false, primary_key: true ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable # t.integer :sign_in_count, default: 0, null: false # t.datetime :current_sign_in_at # t.datetime :last_sign_in_at # t.inet :current_sign_in_ip # t.inet :last_sign_in_ip # Confirmable # コメントアウト解除 + t.string :confirmation_token + t.datetime :confirmed_at + t.datetime :confirmation_sent_at + t.string :unconfirmed_email # Only if using reconfirmable
rails db:migrate
$ rails db:migrate
deviseのモデルにモジュールを追記
migrationファイルでコメントアウトして
使用するとしたモジュールを
deviseのモデルに追記します
例としてconfirmableのモジュールを追加する場合
class User < ApplicationRecord - devise :database_authenticatable, :registerable, - :recoverable, :rememberable, :validatable, :confirmable + devise :database_authenticatable, :registerable, + :recoverable, :rememberable, :validatable, :confirmable end
【Rails】devise - deviseの基本実装手順
経緯
アカウント作成・ログイン機能の実装のまとめ・整理・備忘録
deviseの基本実装手順をまとめる
内容
deviseの基本実装手順
devise/README.mdに記載されている内容
前準備①:deviseをインストール
gem 'devise'
$ bundle install
前準備② : deviseのセットアップファイルの作成
$ rails g devise:install
・config/initializers/devise.rb
・config/locales/devise.en.yml
が作成されます
前準備③ : deviseの認証を使うモデルを作成する
$ rails g devise User
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable end
前準備④ : deviseコントローラーのルーティング
Rails.application.routes.draw do devise_for :users, controllers: { registrations: 'registrations', sessions: :sessions, passwords: 'passwords' }
【はてなブログ】コードシンタックスでファイル名のタイトルを付けたい
【Rails】devise - user_signed_in?
経緯
アカウント作成機能・ログイン機能の実装のまとめ・整理・備忘録
内容
Ruby on Railsのgem 'devise'
の
ヘルパーメソッドuser_signed_in?
について
ソースコード
/lib/devise/controllers/helpers.rb で動的メソッドとして定義されています。
def #{mapping}_signed_in? !!current_#{mapping} end
!!なしの下記と同じ意味ですが、true/falseを明示する意図でしょうか...?
def #{mapping}_signed_in? current_#{mapping} end
sign-in(ログイン)した後は
認証された後のモデルレコードが
current_#{hogehoge}
として格納されているので
#{hogehoge}_signed_in
はtrueとなります