2012-03-05 6 views
1

PostgreSQL 9.1とRails 3.2.2を使用しています。特定のユーザーに対して、会場ごとに最後のシングルusers_checkinsのコレクションを返すにはどうすればよいですか?Rails 3 Distinct JoinとPostgresql

私は

User.find(1) 
    .users_checkins 
    .joins(:venues_checkins) 
    .merge(VenuesCheckin.select('DISTINCT(venues_checkins.venue_id)')) 

を試してみましたが、それはUsersCheckinの属性のいずれかを取得しません。私のモデルは以下の通りです。

class Venue 
    has_many :venues_checkins 
    has_many :users_checkins, through: :venues_checkins 
end 

class UsersCheckin 
    #start:datetime 
    #finish:datetime 
    belongs_to :user 
    belongs_to :venues_checkin 
end 

class VenuesCheckin 
    belongs_to :venue 
    has_many :users_checkins 
end 

class User 
    has_many :users_checkins 
    has_many :venues_checkins, through: :users_checkins 
    has_many :venues, through: :users_checkins 
end 

更新

ユーザーが会場Aと会場Bのための3のための3つのusers_checkinsレコードを持っている場合は、私のコレクションは、1つのレコードが会場Aから最後に作成users_checkinと他のものとの2つのレコードを返す必要があります場所Bから最後に作成されたusers_checkinであるレコードを、その2つのレコードのうち最後に作成されたコレクション内の最初のレコードによって順序付けられたコレクションで記録する。そして、ユーザーから始めるのは、特定のユーザーのusers_checkinsだけです。

+0

最終結果をUsersCheckinのコレクションにしたい場合は、これを開始点にする必要がありますか? 「会場の最後の一人のユーザー_チェック」とは何を意味するのかを明確にすることはできますか? –

+0

ユーザが 'Venue A'のための3つの' users_checkins'レコードと 'Venue B'のための3つのレコードを持っていると、私のコレクションは2つのレコードを返すべきです、' Venue A'から最後に作成された 'users_checkin'これらの2つのレコードのうち最後に作成されたものであるコレクション内の最初のレコードによって順序付けられたコレクションと共に、「Venue B」から最後に 'users_checkin'を作成しました。そして私はユーザから始めます。なぜなら、私は指定されたユーザに対して 'users_checkins'だけを必要としているからです。 – Joey

答えて

1

SQLを書き、psqlプロンプトで動作させるには、Userクラスのカスタムメソッドにして、カスタムクエリをORMに書き込むのをスキップしてください。

また、区別するのではなく、問合せに最小/最大修飾子が必要なように思えます。