我有一个'问题'模型。
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方法。有什么建议吗?
答案 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属性包含点的总和。适合我,但我愿意接受建议!