【发布时间】:2016-08-11 06:34:25
【问题描述】:
我对 Ruby 的 ActiveRecord uniq 方法感到困惑。我正在使用它来尝试取回一组完整的对象,而不仅仅是一个特定的字段。
在我的 Padrino 应用程序脚本中,将报纸名称和分数保存为 Score 对象,ActiveRecord 关系上的 uniq 方法按属性不起作用,并且无论是否使用 SQL 语法,两者都不同。谁能解释发生了什么?
class Score < ActiveRecord::Base
def self.from_today
self.where('created_at > ?', Date.today)
end
end
scores = Score.from_today
scores.class
=> Score::ActiveRecord_Relation
scores.first
=> #<Score id: 123, score: -2.55, source: "Mail", created_at: "2016-08-11 04:29:24", updated_at: "2016-08-11 04:29:24">
scores.map(&:source)
=> ["Mail", "Guardian", "Telegraph", "Independent", "Express", "Mail"]
scores.uniq(:source).count
=> 6
scores.distinct(:source).count
=> 6
scores.select('distinct (SOURCE)').count
=> 5 #AHA, it works!
scores.select(:source).distinct
=> #<ActiveRecord::Relation [#<Score id: nil, source: "Telegraph">, #<Score id: nil, source: "Mail">, #<Score id: nil, source: "Independent">, #<Score id: nil, source: "Express">, #<Score id: nil, source: "Guardian">]>
#oops, no it doesn't
【问题讨论】:
-
那么你想要的结果集是什么?
-
我正在使用它来尝试取回一组完整的对象,而不仅仅是一个特定的字段。
标签: sql ruby-on-rails ruby activerecord padrino