2015-05-07 2 views
3

я заметил, в большинстве обзорного вы в основном проходит где положение или лямбда. Но я пытаюсь сделать что-то вроде этого, и это не будет работатьScoping в Rails 4

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' 

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

ответ

4

Область тела должны быть обернуты в процедурный или лямбда, так что просто изменить его на:

scope :my_scope, -> { 
    select('STC_TERM_GPA, max(TERM), max(last), max(first)').group('STC_TERM_GPA').order('max(first), max(term) ASC') 
} 
+0

Оооо .... сделал синтаксически не знаю, что это, как вы сделали это. Благодаря! – gary1410