はじめてのRuby on Rails、トラブル記録
<< Windowsでrailsをインストールする | TOP | ラジオボタンをクリックするとアクションを呼ぶようにする >>
スポンサーサイト

一定期間更新がないため広告を表示しています

posted by スポンサードリンク | | - | - | - |はてなブックマーク - スポンサーサイト
named_scopeで検索結果が1件の場合
毎回Find使って検索するのが面倒なのでnamed_scope大好きなんだけれど、 named_scopeはFind :allだということを忘れて、
結果が1件だけ返るときによく書き方を間違えてバグらせるのでメモ。

たとえばマイミクみたいな感じでユーザー同士をFriendsとして登録するFriendsモデルがあったとして。
以下のようにAさんとBさんのIDを入れて一致したデータを取り出すようなnamed_scopeを作りました。
named_scope :match,
    lambda{|id1, id2|{:conditions => ["user_id = ? AND friend_id = ?",id1,id2 ]}}
最初に書いたようにnamed_scopeはFind.allなので、配列が返ります。1件だしと思って下のように書くと失敗します。
friend = Friend.match(1,2)
p friend.name  → ひっかかる

正しくは以下の形。
frind = Friend.match(1,2).first
本当はミスを避けるためにnamed_scope内にfirstを入れられるのがいいんだけど、できないっぽい?
軽くググッて調べたけどやり方が見つからなかったので、当座はこれで凌ぎます。
posted by トモト | 15:32 | Rails小ネタ | comments(0) | trackbacks(0) |はてなブックマーク - named_scopeで検索結果が1件の場合
スポンサーサイト
posted by スポンサードリンク | 15:32 | - | - | - |はてなブックマーク - スポンサーサイト
コメント
コメントする










この記事のトラックバックURL
http://hajimete-ruby.jugem.jp/trackback/60
トラックバック
Rails3レシピブック 190の技
Rails3レシピブック 190の技
ついにRails3対応版が出ました!!
WEB+DB PRESS Vol.58
WEB+DB PRESS Vol.58
Rails2系から3への移行時に知りたいことがひとまとまりになっててよかった!色々ググるよりこれを読む方が早い。
Rubyレシピブック 第3版 303の技
Rubyレシピブック 第3版 303の技
Rubyやるならこのリファレンスは必要。
Search this site