返回每个用户查询的第一个匹配记录,activerecord rails 3

时间:2013-01-09 19:52:31

标签: mysql ruby-on-rails-3 activerecord where

我在使用Activerecord和MySQL的Rails 3应用程序中有一个Log模型和一个关联的User模型。 Log有两个属性:名为label的字符串和timestamp。我想找到包含字符串“create”的Log的每个label,但我只希望查询为每个用户返回一条记录,而且我希望第一条记录符合这些条件timestamp属性。让我知道这是否太混乱,我会试着更清楚。

执行此操作的缓慢方法可能是......

logs=[]
User.all.each do |u|
  logs << Log.where("label like ? and user_id = ?","%create%", u.id).order('timestamp').limit(1)[0]
end

1 个答案:

答案 0 :(得分:0)

未经测试,但这是一般的想法:

Log.select("DISTINCT user_id, *").where("label like ?","%create%", u.id).order('timestamp').group("user_id").includes(:user)