find_by_ とか find_all_by_ とかが真新しい。プレースホルダーのことも触れてます!
モデルの行オブジェクト(DB テーブルの 1 行とか複数行とかのデータを持っている)をゲットするときに、DB テーブルに検索をかけます。
その時には、find というメソッドを使うと、ゲットできますね。
例えば、people というテーブルに last_name というカラムがあるとします。
その時は、普通、Person モデルを使ってこの people テーブルにアクセスします。
last_name が '片山' という行を探したい場合、この Person モデルファイルの中で、次のようにします。
ちなみに、SQL インジェクション対策もされているプレースホルダーは、ハテナ(クエスチョンマーク)で表します。? の周りにシングルクォーテーションを付けないように気をつけてね★
でも、もっと簡単な書き方もあるのですよ。メソッド名の find_by_ の後に、探しているカラム名を書けてしまうのです。スゴいですね。
同じ感じで、find :all も書き換えることができます。
↓の 2 つは同じです!
さらにさらに、今日はふとん圧縮袋をもう 1 枚追加いたしまして同じお値段。 and で複数のカラム名をつなげられますのよ。
まあ、これですと名字も名前も「ひとみ」という超珍しい人を探していることになりますがね。「人見 瞳」さんとか、いないことはなさそうですけど・・・
【広告】
その時には、find というメソッドを使うと、ゲットできますね。
例えば、people というテーブルに last_name というカラムがあるとします。
その時は、普通、Person モデルを使ってこの people テーブルにアクセスします。
last_name が '片山' という行を探したい場合、この Person モデルファイルの中で、次のようにします。
person = Person.find(:first, :conditions => ["last_name = '片山'"])
ちなみに、SQL インジェクション対策もされているプレースホルダーは、ハテナ(クエスチョンマーク)で表します。? の周りにシングルクォーテーションを付けないように気をつけてね★
searching_last_name = "片山"
person = Person.find(:first, :conditions => ["last_name = ?", searching_last_name])
でも、もっと簡単な書き方もあるのですよ。メソッド名の find_by_ の後に、探しているカラム名を書けてしまうのです。スゴいですね。
person = Person.find_by_last_name('片山')
同じ感じで、find :all も書き換えることができます。
↓の 2 つは同じです!
people = Person.find(:all, :conditions => ["last_name = '片山'"])
people = Person.find_all_by_last_name('片山')
さらにさらに、今日はふとん圧縮袋をもう 1 枚追加いたしまして同じお値段。 and で複数のカラム名をつなげられますのよ。
person = Person.find_by_last_name_and_first_name('ひとみ')
まあ、これですと名字も名前も「ひとみ」という超珍しい人を探していることになりますがね。「人見 瞳」さんとか、いないことはなさそうですけど・・・
【広告】