Rails 一日一つメソッド (Day6) new, persisted?メソッド
Rails 一日一つメソッド (Day6) new, persistedメソッド
1. newメソッド
'new' メソッドはRailsのActiveRecordで使われ、新しいモデルインスタンスを生成する。
注意 : 'new' メソッドは単純にメモリーにオブジェクトを生成するだけで、DabaBaseには保存されない。
newメソッド例題
def new
@user = User.new
end
- newメソッドは Modelでオブジェクトを生成しDabaBaseに保存されないまま、ユーザーに表示される。
User.newの動作方法
1. オブジェクト生成
- 'User.new' は'User'モデルでインスタンスを生成するまだ、保存されない。
2. 属性初期化
- 'new' メソッドでパラメータを渡すと、オブジェクトの属性を初期化でくる。
3. DabaBaseとの独立性
- 'new' メソッドで生成されたオブジェクトは 'ActiveRecord'の 'save' メソッドを呼び出まではDabaBaseに保存されない。
2. persisted?メソッド
'psersisted?' メソッドは ActiveRecordにオブジェクトがDabaBaseにすでに保存されているかどうかを示す。
オブジェクトが存在する場合 : trueリターン
オブジェクトが存在しない場合 : falseリターン
psersisted?メソッド例題
def create
@user = User.create(user_param)
if @user.persisted?
redirect_to user_path(@user), notice: 'ユーザーが登録されました。'
else
render :new
end
end
@user.persisted?
- 'User' オブジェクトがDabaBaseに生成されていることを確認する。
- @userがDabaBaseに保存された時は、(persisted? = true)、'redirect_to user_pat(@user)' を返す。
- 失敗した時は、(persisted? = false) を返し、render :newnに戻る。
3. has_secure_password
has_secure_passwordはActiveRecordモデルで使われるメソッドで、Passwordセキュリティなどの機能を提供する。
has_secure_passwordメソッドは 'bcrypt' ライブラリを使ってPasswordを安全に処理する。
has_secure_password例題
class User < ApplicationRecord
has_secure_password
end
gem "bcrypt", "3.1.18"
- ユーザモデルにhas_secure_passwordを追加することで、パスワード管理に関する上記の機能がユーザモデルに自動的に追加される。このため、データベースのusersテーブルにはpassword_digestというフィールドが存在する必要があり、 has_secure_passwordは、このpassword_digestフィールドにハッシュされたパスワードを保存する。