2012-06-19 1 views
1

튜터링 세션 용 모델에서 다른 시간에 미리 알림 텍스트를 트리거하는 코드가 있습니다. 일부 리팩터링을 시도 할 때까지 모든 것이 정상적으로 작동했습니다. 이제 문제가 있습니다.레일이 다른 메소드 내부에서 메소드를 호출 할 수 없도록합니다. 레일스는 메소드가 정의되지 않았다고 계속 말합니다.

irb(main):006:0> TutoringSession.send_reminder_text 
NoMethodError: undefined method `send_reminder_text' for #<Class:0x00000003cfe5d8> 
    from /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.1.1/lib/active_record /base.rb:1088:in `method_missing' 
from (irb):6 
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in `start' 
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in `start' 
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.1.1/lib/rails/commands.rb:40:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

이것은 send_reminder_text 명확 위의 정의된다는 사실에도 불구하고있다 : 나는 deliver_just_before_reminder_text 함수를 호출 할 때

def send_reminder_text(texts_batch) 
    texts_batch.each do |text| 
     page_number = Refugee.find(text.refugee_id)[:last_page] 
     body_of_text = text[:begin_time].in_time_zone.strftime("Burma Reminder: upcoming session at %I:%M%p beginning on page #{page_number}. 
      Please email [email protected] to reschedule or cancel the session.") 
     text.begin_text(body_of_text) 
    end 
end 

def self.deliver_pm_reminder_text 
    texts_batch = TutoringSession.batch_for_pm_reminder_text 
    send_reminder_text(texts_batch) 
end 

def self.deliver_just_before_reminder_text 
    texts_batch = TutoringSession.batch_for_just_before_reminder_text 
    send_reminder_text(texts_batch) 
end 

, 나는 다음과 같은 오류 메시지가 나타납니다.

답변

3

귀하의 방법 선언은 방법은 TutoringSession 클래스의 객체에 지정합니다 :

def send_reminder_text(texts_batch) 

하지만 클래스 자체의 방법 인 것처럼 당신은 그것을 호출하려는 :

irb(main):006:0> TutoringSession.send_reminder_text 

정의를 다음으로 변경해보세요.

def self.send_reminder_text(texts_batch) 
관련 문제