findは4つのパターンで検索できる
Ruby on Railsでfindメソッドはよく利用されるかと思いますが、検索方法にもいくつかパターンが
あります。
find(int)
Model.find(1)
Modelテーブルのidカラム「1」が検索される
複数、配列も指定可能
Model.find(1,2,3)
Model.find([1,2,3])
検索できなければ例外が発生する。
これはDBに存在するキーをわかっていて検索させているという意味があって、
検索キーがない場合は、Railsが例外(RecordNotFound)を発生させます。
下記方法の条件を利用してのファインダでは、条件にマッチするレコードを
検索しているので、もしない場合は空の配列を返します。
find(symbol, :conditions)
symbolには「;all」とか「:first」が入ります。
:conditionsはSQLの「where」で指定する条件になります。
Model.find(:all, :conditions => "column = 1")
これだとSQLインジェクションになってしまうので、バインドを利用します。
Model.find(:all, :conditions => "column = ?", 1)
find(symbol, Array)
symbolには「;all」とか「:first」が入ります。
Arrayには検索条件を配列で渡すことができます。
Model.find(:all, :conditions => "column => :cond", {:cond => 1})
find_by_xxx()
Model.find_by_name("smoothy")
Modelテーブルでnameがsmoothyのものを検索します。
直感的にわかりやすいと思いますが、レコードが多い場合などにはパフォーマンスが低下しますので、
ご注意ください。