1. ホーム
  2. ruby-on-rails

[解決済み] Array Rails ActiveRecordで例外なくwhere IDを選択する方法

2022-04-28 05:32:28

質問

のようなidの配列がある場合

ids = [2,3,5]

を実行します。

Comment.find(ids)

はすべて正常に動作します。しかし、存在しないidがある場合、例外が発生します。これは通常、あるフィルタにマッチするIDのリストを取得し、次のようなことを行ったときに発生します。

current_user.comments.find(ids)

今回は、有効なコメントIDがあるかもしれませんが、指定したユーザーに属していないため、見つからず、例外が発生します。

試しに find(:all, ids) しかし、それはすべてのレコードを返します。

今、私ができる唯一の方法は

current_user.comments.select { |c| ids.include?(c.id) }

しかし、それは超非効率的なソリューションのように思えます。

を選択する良い方法はないでしょうか? 配列のID 存在しないレコードで例外を発生させることなく?

どのように解決するのですか?

例外を回避するだけなら、"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])