例外なく配列Rails ActiveRecordのIDを選択する方法 質問する

例外なく配列Rails ActiveRecordのIDを選択する方法 質問する

次のような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])

おすすめ記事