PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Integrieren der benutzerdefinierten SELECT-Klausel in die ActiveRecord-Abfrage

Nun, das war einfach. Verwenden von .first war das Thema. Ich nehme an, das liegt daran, dass die Abfrage keine Modelldatensätze zurückgibt. Wenn ich den Index 0 des Ergebnisses direkt anspreche, bekomme ich alle meine Punkte.

dieser Code funktioniert also:

 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