10

「リクエスト」オブジェクトのリストがあり、それぞれがかなり正常なアクティブレコードの品質を持っています。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=> オプションを使用する必要があると思います。

4

3 に答える 3

9
Games.find(
    :all, :limit => 5,
    :include => [:games, :requests],
    :group => 'games, whatever, whatever_else'
)
于 2009-03-16T17:00:28.823 に答える
6

Rails uniq_by を試してみてください。これは関連付けでも動作し、配列を返します。

@document = Model.uniq_by(&:field)

もっと詳しく

于 2013-10-10T22:59:14.160 に答える
0

find_by_sql と GROUP BY を使用してこれを行うことができると思います。

Games.find_by_sql("SELECT * FROM games GROUP BY user_id")
于 2009-03-16T16:49:20.130 に答える