次のようなIDの配列がある場合
ids = [2,3,5]
そして私は演じる
Comment.find(ids)
すべて正常に動作します。しかし、存在しないIDがある場合、例外が発生します。これは通常、フィルターに一致するIDのリストを取得し、次のような操作を実行した場合に発生します。
current_user.comments.find(ids)
今回は有効なコメント ID があるかもしれませんが、その ID は指定されたユーザーに属していないため、見つからず、例外が発生します。
試してみましたfind(:all, ids)
が、すべてのレコードが返されます。
今私にできる唯一の方法は
current_user.comments.select { |c| ids.include?(c.id) }
しかし、それは私にとっては非常に非効率的な解決策のように思えます。
もっと良い選択方法はありますか?配列内のID存在しないレコードで例外が発生しないのですか?
ベストアンサー1
懸念している例外を回避するだけであれば、「find_all_by..」関数ファミリは例外をスローせずに動作します。
Comment.find_all_by_id([2, 3, 5])
IDの一部が存在しない場合でも機能します。これは
user.comments.find_all_by_id(potentially_nonexistent_ids)
ケースも同様です。
アップデート: Rails 4
Comment.where(id: [2, 3, 5])