2009-03-16 19 views
10

私は 'request'オブジェクトのリストを持っています。それぞれのオブジェクトはかなり普通のアクティブレコードの性質を持っています。リクエストテーブルは、リクエストテーブルにrequest.games配列があるように、結合テーブル 'games_requests'を持つゲームテーブルに関連しています。Rails:特定のフィールドで一意のレコードをどのように見つけることができますか?

質問は、一意性がゲームの列と他のいくつかのペアで定義されているが、特に要求するユーザーの名前のような他の列を無視する最後のn個の一意の要求の検索を行う方法はありますか? )

「find(:all、:limit => 5、:include => [:games、:stage])」という構文を見ましたが、重複を返していました。

ありがとう...

EDIT:素晴らしいレスポンスのために混乱のおかげです。本当に近いですが、依然として有効なリクエストオブジェクトであることが必要です。要求された行では最初の5つのレコードです。私はあなたがそれを構築したときにfindを使うだけで、最初のfindによって返されたセットのそれぞれにマッチするテーブルの最初の行の2番目のfindを実行することができます。

EDIT:

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 =>オプションを使用する必要があると考えています。

答えて

8
Games.find(
    :all, :limit => 5, 
    :include => [:games, :requests], 
    :group => 'games, whatever, whatever_else' 
) 
+0

これは何でも、ゲームを返し、whatever_else列。完全な要求オブジェクトを返す方法はありますか?これらの列に一意性がないものだけを取り出す方法はありますか? – Sniggerfardimungus

+0

うん。編集済み – chaos

+0

Hrm。ジョインテーブルを介して仮想属性である「ゲーム」に関する問題があります。 (編集された質問を参照してください) – Sniggerfardimungus

0

私はあなたがこの使用find_by_sqlとGROUP BYを行うことができると思う:

Games.find_by_sql("SELECT * FROM games GROUP BY user_id") 
6

はRailsのuniq_by.Itにも関連して返す配列で動作します試してみてください。

@document = Model.uniq_by(&:field)

もっとDetail

+2

'uniq_by'は償却され、' uniq'で置き換えられます。 – Cimm

関連する問題