Ruby on rails Rails 4中的范围界定

Ruby on rails Rails 4中的范围界定,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我注意到,在大多数范围中,您大多通过where子句或lambda。但我正试着做这样的事情,它不会起作用 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 当我给LesleyGrade.te

我注意到,在大多数范围中,您大多通过where子句或lambda。但我正试着做这样的事情,它不会起作用

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
当我给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'

有人对此有什么解决办法吗

范围主体必须包装在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')
}
scope :my_scope, -> { 
  select('STC_TERM_GPA, max(TERM), max(last), max(first)').group('STC_TERM_GPA').order('max(first), max(term) ASC')
}