「リクエスト」オブジェクトのリストがあり、それぞれがかなり正常なアクティブレコードの品質を持っています。requests テーブルは、結合テーブル「games_requests」を使用して games テーブルに関連付けられているため、リクエストには request.games 配列が含まれます。
問題は、一意性が games 列と他のいくつかの列によって定義されている最後の n 個の一意の要求を検索する方法があるかどうかですが、特に他の列 (要求しているユーザーの名前など) を無視することです。
「find (:all, :limit=>5, :include=>[:games,:stage])」のような構文を見ましたが、重複が返されていました。
ありがとう...
編集: 素晴らしい反応をくれた chaos に感謝します。あなたは私を本当に近づけましたが、戻り値が有効なリクエスト オブジェクトである必要があります: リクエストされた行で異なる最初の 5 つのレコードです。あなたが作成したように検索を使用して、最初の検索によって返された各セットに一致するテーブルの最初の行に対して2番目の検索を実行できます。
編集:
Games.find(
:all, :limit => 5,
:include => [:games, :requests],
:group => 'games, whatever, whatever_else'
)
...SQL エラーが発生します。
Mysql::Error: Unknown column 'games' in 'group statement': SELECT * FROM `games` GROUP BY games
私のプロジェクトにとって正しいと思われるものにいくつかの変更を加えました。ゲームの代わりにリクエストのリストを取得するなど:
Request.find(
:all, :order=>"id DESC", :limit=>5,
:include=>[:games], #including requests here generates an sql error
:group=>'games, etc' #mysql error: games isn't an attribute of requests
:conditions=>'etc'
)
ここで :join=> オプションを使用する必要があると思います。