如何找到()某些字段中唯一的所有记录?

时间:2009-03-16 16:34:53

标签: ruby-on-rails activerecord find unique distinct

我有一个'request'对象列表,每个对象都具有相当正常的activerecord质量。 requests表与带有连接表'games_requests'的游戏表相关,因此请求具有request.games数组。

问题是,有没有办法找到最后n个唯一请求,其中唯一性由游戏列和其他几个定义,但特别忽略其他列(如请求用户的名称?)

我看到了'find(:all,:limit => 5,:include => [:games,:stage])'这样的语法,但是它返回了重复项。

...谢谢

编辑:感谢混乱的回应。你让我非常接近,但我仍然需要返回有效的请求对象:前5条记录在请求的行中是不同的。我可以在构造它时使用find,然后对表中的第一行执行第二次查找,该第一行匹配第一个查找返回的每个集合。

编辑:

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 =>选项在这里。

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:6)

尝试使用Rails uniq_by.It也可以使用关联并返回数组。

@document = Model.uniq_by(&:field)

更多Detail

答案 2 :(得分:0)

我认为你可以使用find_by_sql和GROUP BY:

来做到这一点
Games.find_by_sql("SELECT * FROM games GROUP BY user_id")