第14・15章 ActiveRecord
Rails本の勉強メモを書いていきます。
テーブルとモデルの命名規則
テーブル名がモデル名を小文字にして複数形にするという命名規則を無効にするときは、environments.rbでActiveRecord::Base::pluralize_table_namesをfalseにしてしまえばよいらしい。
一時的に変更する場合はモデル側で、
class Model < ActiveRecord::Base set_table_name :model end
といった感じにするらしい。
Boolなデータ
テーブルにBool値を格納する場合、RailsはDBによって様々なようなので、0, "0", "f", "false", "", nilをfalseと判断するらしい。
主キー
Railsでは主キーはidにしておくのが無難。元々idがないテーブルを利用したいときに
class Model < ActiveRecord::Base set_primary_key "keyname" end
とすることは出来るそうだけど、参照は出来ても書き込みは保証しないとか何とか書いてあったような…。
データベースへの接続
Railsとしては特に弄らなそうだけど、ライブラリとしてActiveRecordを使う際には重要そうなところ。
CRUD
Create
コンストラクタはブロックもハッシュも取ることが出来る。オブジェクトを作ったと同時にデータベースに保存したければcreateを使う方がsaveのし忘れがなくて良さそう。
Read
基本的にはfindメソッドで行なう。findメソッドはパラメーターの渡し方によって挙動がかなり違ってややこしい。
- find(id): idに該当するレコードがなければRecordNotFound例外が発生する。
- find(:first, ...): 最初の一つのレコードを返す
- find(:all, ...): 見つかったすべてのレコードを配列で返す
- :conditions : SQLのwhere句に相当する部分条件を指定する
- :order : 並び順、詳しい指定の仕方は書いてなかった気がする。
- :limit : :allのときに使う。いくつまで取ってくるか。
- find_by_xxxxやfind_all_by_xxxxでも検索できる。
Validation
データのバリデーションはモデルに定義しておけば良いらしい。いろいろなメソッドが用意されてるのだけど、非常に名前が長い気がする。。。もっと短い名前のaliasがほしいと思った。これだけ長いとバリデーション云々の前にtypoする気もする。
メソッドならまだaliasのしようがあるから良いけれど、ハッシュパラメータ*1はaliasが効かないから長いのはつらいような気がする。
(個人的に)よく使いそうなやつを抜き出すと、
- validates_length_of
- :is
- :minimum
- :maximum
- validates_numericality_of
- validates_presence_of
といった感じかな。
コールバック
コールバックは素晴らしいと思った。これにメソッドとかを指定しておけば適切なタイミングで処理を行なってくれるというもの。
いくつかの語彙で整理すると覚えやすそう。
- validation : beforeのみ。
- create
- save
- update
- destroy
この語彙とbefore、afterのタイミングで行なえて、その詳しい順番はP.278の図15.4が参考になる。
after_findとafter_initializeはパフォーマンスの関係で使う場合には別途定義する必要があるそうな。
テーブル間の関係(has_many, ...)とか辺りは経験不足のためよく分からなかった。
*1:勝手に造語。引数にハッシュを渡してパラメータとするようなメソッドのことです