Область видимости в Rails 4

Я заметил, что в большинстве областей видимости вы в основном передаете предложение where или лямбда. Но я пытаюсь сделать что-то подобное, и это не сработает

class LesleyGrade < ActiveRecord::Base
  scope :my_scope, select('STC_TERM_GPA, max(TERM), max(last), max(first)').group('STC_TERM_GPA').order('max(first), max(term) ASC')

end

Просто для справки вот моя таблица:

Lesley Grade
------------
id
first
last
stc_term_gpa
term

Когда я позвонил LesleyGrade.term_gpa, это то, что я получаю:

  LesleyGrade Load (27.9ms)  SELECT STC_TERM_GPA, max(TERM), max(last), max(first) FROM "lesley_grades"  GROUP BY STC_TERM_GPA  ORDER BY max(first), max(term) ASC
NoMethodError: undefined method `call' for #<LesleyGrade::ActiveRecord_Relation:0x007fdf9ab13d08>
from /Users/garytsai/.rbenv/versions/2.0.0-p643/lib/ruby/gems/2.0.0/gems/activerecord-4.1.1/lib/active_record/relation/delegation.rb:136:in `method_missing'

Есть ли у кого-нибудь решения для этого?


person gary1410    schedule 07.05.2015    source источник


Ответы (1)


Тело области действия должно быть заключено в proc или lambda, поэтому просто измените его на:

scope :my_scope, -> { 
  select('STC_TERM_GPA, max(TERM), max(last), max(first)').group('STC_TERM_GPA').order('max(first), max(term) ASC')
}
person infused    schedule 07.05.2015