ユーザーが記入するアンケートに取り組んでいます。ユーザーは各質問に何度も答えることができます。回答には、質問とペアにする question_key があります。ユーザーが作成したすべての応答を取得せずに、ユーザーの現在の応答の完全なセットを取得したいと考えています。
応答テーブルは次のようになります。
create_table "responses", :force => true do |t|
t.string "question_key", :null => false
t.text "value", :null => false
t.integer "user_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
応答クラスの関連部分は次のとおりです。
class Response < ActiveRecord::Base
def self.current
recent.uniq {|response| response.question_key}
end
scope :recent, order('created_at DESC')
end
user.responses.current
一連の応答を取得しますが、実際には非効率的です。ユーザーがこれまでに作成したすべての応答を取得し、一意の値ごとに最新のものを除くすべてを破棄していますquestion_key
GROUP BY を実行する前に行を並べ替えて、必要なことを行う SQL クエリを見つけました。これを Response::current で使用する合理的な方法はありますか?
SELECT *
FROM (
SELECT *
FROM responses
WHERE user.id = 6
ORDER BY created_at DESC ) as user_responses
GROUP BY question_key