LoginSignup
0
0

【学習】Ruby on Rails チュートリアル 第7版 - 第6章 ユーザーのモデルを作成する

Last updated at Posted at 2023-05-17

5/17 8:20開始

rails console --sandbox
→サンドボックスモード:セッションで行ったデータベースへの変更をコンソールの終了時にすべて “ロールバック”する。

valid?メソッド
→オブジェクトが有効かtrue/falseで評価する。
※invalid?メソッドはその逆

6.1まで終了

5/17 9:00 終了

5/18 8:15 開始

・modelのテスト
*model作成時に↓にテストファイルが作成される。
test/models/user_test.rb

*setupメソッド
setupメソッド内に書かれた処理は、各テストが走る直前に実行される。

インスタンス変数でも、setupメソッド内で宣言しておけば、
すべてのテスト内でそのインスタンス変数が使えるようになる。

*正規表現
Rubular↓で対話的に正規表現を試せる。
https://railstutorial.jp/chapters/modeling_users?version=7.0#code-better_email_regex

6.2.4まで終了

5/18 9:10 終了

5/18 18:30 開始

*dup:同じ属性を持つデータを複製するためのメソッド。

*一意性のテスト
メールなど大文字と小文字を区別しないでテストしたい場合...
↓とすることで実現できる。
app/models/user.rb
uniqueness: { case_sensitive: false }

*データベースのレベルで一意性を保証
データベース上の一意性を保証したいカラムにインデックス(index)を追加し、
そのインデックスが一意であるようにする。

具体的には...
マイグレーションでインデックスを追加する。

$ rails g migration add_index_to_users_email
↓のマイグレーションファイルが作成される。
db/migrate/[timestamp]_add_index_to_users_email.rb

add_indexメソッドを使用し、インデックスを追加する。
(usersテーブルのemailカラムにインデックスを追加。オプションでunique: trueで一意にする。)
class AddIndexToUsersEmail < ActiveRecord::Migration[7.0]
def change
add_index :users, :email, unique: true
end
end

6.2まで終了

5/18 19:15終了

5/19 8:15 開始

・セキュアなパスワード
→ハッシュ化したものをデータベースに保存する。
ハッシュ化:ハッシュ関数を使って、入力されたデータを不可逆データ(復元不可能なデータ)に変換する処理を指す。

ログイン時は、「ハッシュ化して保存されたパスワード」と「入力したパスワードをハッシュ化した値」を比較する。
→ハッシュ化されたパスワード同士を比較することで、生のパスワードをデータベースに保存するという危険なことを回避する。

具体的には....

model内にhas_secure_passwordメソッドを追加する。

*セキュアにハッシュ化したパスワードを、データベース内のpassword_digest属性に保存できる。

*2つの仮想的な属性(passwordとpassword_confirmation)が使えるようになる。また、存在性と値が一致するかどうかのバリデーションも追加される。

*authenticateメソッドが使えるようになる(引数の文字列がパスワードと一致するとUserオブジェクトを返し、一致しない場合はfalseを返すメソッド)。

※↑を使えるようにするためには...
モデル内にpassword_digest属性が含まれていること
bcryptライブラリをGemfileに追加する

6章終了!

5/19 9:10 終了

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