ActiveRecord和复杂查询

时间:2013-11-27 23:54:12

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

我有一个'问题'模型。

class Question < ActiveRecord::Base
  has_many :answers
end

......和答案模型......

class Answer < ActiveRecord::Base
  belongs_to :question
  has_many :answer_points
end

......和答案点模型......

class AnswerPoint < ActiveRecord::Base
  attr_accessible :points
  belongs_to :answer
  belongs_to :attribute
end

...和用户回答模型......

class UserAnswer < ActiveRecord::Base
  belongs_to :answer
  belongs_to :user
end

...和属性模型。

class Attribute < ActiveRecord::Base
  has_many :answer_points
end

用户回答问题,每个答案都可以包含与特定属性相关联的点值。 (即,这个答案给出了2个通信点,一个分析等)

我想显示用户回答问题时生成的前5-10个属性的列表。我知道如何从原始的SQL角度来处理这个问题,但我更喜欢更优雅的rails-y方法。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

好吧,我已经解决了这个问题:

questions = Question.where(:arbitrary_field => 'doge')
answers = Answer.where('question_id in (?)', questions.pluck(:id))
AnswerPoint.where('answer_id in (?)', answers.pluck(:id)).select('attribute_id, sum(points) as points').group('attribute_id').order('points desc')

它为每个唯一的attribute_id返回一个AnswerPoint模型,points属性包含点的总和。适合我,但我愿意接受建议!