खैर, यह आसान था। .first
का उपयोग करना मुद्दा था। मुझे लगता है कि ऐसा इसलिए है क्योंकि क्वेरी द्वारा लौटाए गए कोई मॉडल रिकॉर्ड नहीं हैं। अगर मैं परिणाम के 0 सूचकांक को सीधे संबोधित करता हूं, तो मुझे अपने सभी अंक मिल जाते हैं।
तो यह कोड काम करता है:
query =
Assessment.rating_attributes.collect{|attribute|
1.upto(5).collect do |i|
%Q{sum(CASE WHEN #{attribute.to_s} = #{i} then 1 else 0 end) as #{attribute}_score_#{i}}
end
}.join(', ')
Assessment.where(selection_attribute: 1038).select(query)[0]
=> #<Assessment id: nil>
Assessment.where(selection_attribute: 1038).select(query)[0].first_attribute_score_1
=> 3