LoginSignup
0
0

More than 3 years have passed since last update.

Railsチュートリアル 第6章<復習>

Posted at

第6章の復習メモです。
個人的に重要と思ったことを書きます。
調べたことや、知っていたことも含めて書きます。

モデル

モデルとは

データベースに対して、CRUD操作を行うクラスのこと。
SQLを使わず、Rubyが提供するメソッドを用いて、DB操作できる。

モデルの生成

generate modelコマンドで、モデルを生成できる。

$ rails generate model User name:string email:string

この場合、Userモデルを生成し、
string型のnameカラム、emailカラムを同時に生成している。

モデル名の頭文字は大文字とし、単数形とする慣習がある。
(コントローラの場合、複数形を使う慣習がある。)

DBへの反映

generate modelを実行しただけでは、モデルがDBに反映されていない。
migrationファイルを適用する必要がある。
migrationファイルは、generate modelコマンド実行時に生成される。

マイグレーションファイル

db/migrate/[timestamp]_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

この場合、DBにusersテーブルを作成し、
string型のnameとemailカラム、timestampsカラムを作成する。
主キー(id)は、ここには書かれていないが、自動生成される。

DBに反映するには、以下のコマンドを実行する。

$ rails db:migrate

反映を取り消したい場合、以下のコマンドを実行する。

$ rails db:rollback

モデルのメソッド

最初に書いた通り、SQLを使わず、RubyのメソッドでDB操作できる。

行の作成

user = User.new(name: "Michael Hartl", email: "mhartl@example.com")

※DBにInsertするには、後述のuser.saveが必要

検索

user = User.find_by(email: "mhartl@example.com")

この場合、emailカラムを検索条件としている

はじめの一行を抽出

user = User.first

全行抽出

user = User.all

更新

user.email = "foo@bar.com"

※DBをUpdateするには、後述のuser.saveが必要

保存(DBに反映)

user.save

保存に成功すればtrueを、失敗すればfalseを返す。

削除(DBからDelete)

user.destroy

バリデーション

モデルクラスに、validatesメソッドを記述することで、
バリデーションを実装できる。

存在チェック

validatesメソッドに、presenceという引数を与えて使う。

app/models/user.rb
class User < ApplicationRecord
  validates :name, presence: true
end

この場合、nameカラムの存在チェックを実装している。

長さチェック

validatesメソッドに、lengthという引数を与えて使う。

app/models/user.rb
class User < ApplicationRecord
  validates :name,  presence: true, length: { maximum: 50 }
end

この場合、nameカラムの最大文字数を、50文字に設定している。

フォーマットチェック

validatesメソッドに、formatという引数を与えて使う。

app/models/user.rb
class User < ApplicationRecord
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX } # ← フォーマットチェック
end

この場合、emailカラムについて、VALID_EMAIL_REGEXという変数に
代入したフォーマットに当てはまるかどうか、チェックしている。

一意性チェック

validatesメソッドに、uniquenessという引数を与えて使う。

app/models/user.rb
class User < ApplicationRecord
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: true # ← 一意性チェック
end

この場合、emailカラムの一意性をチェックしている。

パスワードのハッシュ化

以下を行うことで、パスワードをハッシュ化し、DBに登録できる。

  1. モデルクラスにhas_secure_passwordを実装する
  2. DBにpassword_digestカラムを追加する
  3. ハッシュ関数のbcryptをGemfileに追加する

1. モデルクラスにhas_secure_passwordを実装する

app/models/user.rb
class User < ApplicationRecord
  .
  .
  .
  has_secure_password # ← これを追加する
end

2. DBにpassword_digestカラムを追加する

generate migrationコマンドでmigrationファイルを作成し、
カラムを追加する。

3. ハッシュ関数のbcryptをGemfileに追加する

gem 'rails',          '5.1.6'
gem 'bcrypt',         '3.1.12' # ← これを追加する
.
.
.

その他

テストについて、詳しめに解説されていますが、
長くなりそうなので、復習メモでは触れないでおきます。

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