Rails 3与Postgresql不同加入

时间:2012-03-05 20:36:40

标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord

使用Postgresql 9.1和Rails 3.2.2。如何为给定用户返回每个场地的最后一个users_checkins的集合?

我试过了

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

更新

如果用户的Venue A有3个users_checkins记录,Venue B有3个users_checkins记录,我的集合应该返回2条记录,其中一条记录是Venue A中最后创建的users_checkin,另一条记录是Venue B最后创建的users_checkin由集合中的第一个记录排序的集合,是最后创建的那两个记录中的哪一个。我从用户开始,因为我只想要给定用户的users_checkins。

1 个答案:

答案 0 :(得分:1)

如果您可以编写SQL并使其在psql提示符下工作,请将其设置为User类中的自定义方法,并跳过尝试将自定义查询楔入ORM。

此外,听起来您需要查询中的最小/最大限定符,而不是不同。