RubyのActiveRecord uniqメソッドで混乱します。私はそれを使用して、特定のフィールドだけでなく、完全なオブジェクトの配列を取得しようとしています。select vs distinct vs uniq?
新聞の名前とスコアをスコアオブジェクトとして保存する私のPadrinoアプリスクリプトでは、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
が制限されます。希望する結果セットは何ですか? –
私はそれを使用して、特定のフィールドだけでなく、完全なオブジェクトの配列を取得しようとしています。 –