Railsの会25日目[dup /インデックス/pg (0.18.4) ]
今回の範囲(続き)
インデックス
データベースの世界で、インデックス(索引)とはテーブルに格納されているデータを高速に取り出す為の仕組みです。
基本: カラムに対してインデックスをつける。
ALTER TABLE landing_pages ADD INDEX index_name(user_id)
インデックスが早い時
1. テーブル内のデータ量が多く、少量のレコードを検索する場合
2. WHERE句の条件、結合の条件、ORDER BY句の条件として頻繁に利用する
ただし全表走査が目的のテーブルであれば索引は不要
3. NULL値が多いデータから、NULL値以外の検索をする
IndexはNULLを含まないのでNULL値以外の検索には効果がある
indexを導入しない方がいい時
1.表の規模が小さいか、表から大部分のレコードを検索する場合
2.WHERE句等の条件としてあまり仕様されないもの
3.列の値が頻繁に挿入、更新、削除される
4.Indexは表に新規行が挿入されればIndexにも自動的に値が格納される。そのためデータの検索速度は向上するが挿入、更新、削除の処理では索引のメンテナ
ンス作業が発生し、速度低下につながる
5.WHERE句の条件として使用されるが、列が式の一部として参照される
MySQLのIndexをはるコツ - Qiita
validation
1. validatesを使い、モデルクラスに検証する条件を定義する。
# 商品名は必須
validates :title, presence: true
2. コントローラーなどでモデルを保存/更新する。
if @product.save
redirect_to @product, notice: '商品を作成しました'
else
render :new
end
3. バリデーションエラー時には、errorsにエラーメッセージが設定されるので、それを表示する
Rails 4でモデルのバリデーションまとめ - Rails Webook
dup
元のオブジェクトと同じクラスの新しいオブジェクトで、
元のオブジェクトのインスタンス変数を新しいオブジェクトにコピーしたもの。
h = Hoge.new hd = h.dup h.name = 'name' hd.name = 'dup' h.name #=> 'name'
uniqueness
指定した属性がユニークであることを検証する。
# 定義
validates email, uniqueness: true # 値がユニークであれば検証成功# テスト
it { is_expected.to validate_uniqueness_of(:email) }
upcase / downcase
self.email = email.downcase
before_save
セーブする直前に毎度呼び出される。
before_save{ self.email = email.downcase }
コールバック
バリデーションの実行、DBの保存などのタイミングで処理を行うための機能。
一部例
- after_validation #検索メソッドでオブジェクトが見つかったタイミングで実行
- before_save #オブジェクトがインスタンス化されたタイミングで実行
Bundler cannot continue.のエラーが出た時
An error occurred while installing pg (0.18.4), and Bundler cannot
continue.
Make sure that `gem install pg -v '0.18.4'` succeeds before bundling.