1

そのため、Redis スコアボード スタイルのものに保存されているユーザーがたくさんいます。ただし、これらのユーザーが削除される場合があり、Redis では削除されません。これは私のアプリにとって重要ではないので、気にしません。ただし、Rails では、次のようなクエリを使用して結果を取得しようとすると、次のようになります。

User.find([1,2,3,4,244])

Rails はユーザーの 1 人を見つけることができないため、次の非常に役立つエラーが返されます。

ActiveRecord::RecordNotFound: Couldn't find all Users with IDs (1, 2, 3, 4, 244) (found 4 results, but was looking for 5)

(人間が読めるエラーについてはレールに称賛を!)

私は疑問に思っていますが、その配列に存在するすべての結果を取得し、すべての結果が返されなくても気にしないように最善の努力をする方法はありますか?

4

2 に答える 2

2

代わりに使用whereすると、次のようになります。

User.where(id: [1, 2, 3, 4, 244])

Rails はこれを SQL に変換します。これは、ステートメントが実行"id" IN (1, 2, 3, 4, 244)されるのとまったく同じ SQLですが、Rails は、 とは異なり、を使用して正確な数のレコードを返す必要はありません。findwherefind

于 2013-04-23T23:46:22.880 に答える
1

コマンドを使用SQL inします。これにより、データベース上のすべての既存の値が返され、他の値は無視されます。

User.where('id in ?', [1,2,3,4,244])
User.where(id => [1, 2, 3, 4, 244])
于 2013-04-23T23:45:25.560 に答える