読者です 読者をやめる 読者になる 読者になる

Rails findメソッド:all,:firstの扱い

Ruby Rails

findする際の第一引数にあたる:all,:firstだがちょっと躓いた

:allは名のごとく条件に当てはまるものを全件取得してくる
:firstは条件に当てはまる中の最初の1件のみ取得してくる

:allを指定した時点で結果が配列になって返ってくるというところで詰まった
特定の値のみを取得してくる際にも:allだとeach文で取り出す必要がある

それと選択した値が存在しなかった場合の返してくる値が違う

:all
すでに配列にはされているため空の配列()が返ってくる

:first
nilが返ってくる

だとblank?で判定できないんじゃないかとも思ったがそうでもなかった

>> [].blank?
=> true
>> nil.blank?
=> true
>> 1.blank?
=> false

動的ファインダ

ActiveRecordではRubyの動的な能力を活かして自動的にSQLを作るようで

ModelName.find_all_by_column_name(value)
ModelName.find_by_column_name(value)

上記の様に書くと

ModelName.find :all, :conditions => ["column_name = ?", value]
ModelName.find :first, :conditions => ["column_name = ?", value]

という風に書いているのと同じ扱いになるぽい