2011-12-04 3 views
1

제 모델 중 하나에서 상당히 간단한 새로운 방법을 만들었습니다. 나는 그것을 테스트 레일 콘솔에 갈 때, 나는 다음과 같은 오류 얻을 :어떻게 레일즈 콘솔에서 새로 생성 된 방법을 사용할 수 있습니까?

NoMethodError: undefined method 'get' for #<Class:0x3a5032fc> 

내가 코드를 저장 한을 레일 콘솔을 종료 한 후 다시 시작,하지만 난 여전히 NoMethod를 얻을 수

class Race <ActiveRecord::Base 
    def get(race_date,track_name,race_number) 
    Race.where(:date =>race_date, :race_nbr => race_number, :track_id => (Track.where(:track_code => track_name))) 
    end 
end 
NoMethodError:undefined method 'get' 산출

Race.get("2011-12-04", "BEL", 1) 

: 콘솔에서

, 나는 다음과 같은 입력합니다.

의견을 보내 주시면 감사하겠습니다.

답변

7

레이스 클래스의 인스턴스 메서드를 정의했습니다.

def self.get(race_date, track_name, race_number) 
    track = Track.where(:track_code => track_name) 
    Race.where(:date => race_date, :race_nbr => race_number, :track_id => track) 
end 

그럼 당신은 Race.get를 사용할 수 있습니다 어쩌면 당신은 같은 클래스 메소드가 정의한 것입니다.

+1

좋은 대답, +1 – apneadiving

+2

줄을 더 짧게 만들기 위해'track'을 지역 변수로 분리 할 것입니다. 하지만 그 외에 훌륭한 대답. –

+0

Ryan - 트랙을 지역 변수로 분리하면 정확히 무엇을 의미합니까? 당신이 의미하는 바를 예를 들어 주시겠습니까? – Mutuelinvestor

4

@lucapette가 올바르게 처리되었습니다. 당신은 클래스 메소드를 생성해야한다. 다음은 클래스 메소드를 정의 할 수있는 또 다른 방법입니다. 많은 수의 클래스 메소드를 정의하는 대규모 프로젝트에서는 코드를보다 깔끔하게 정리할 수 있지만 그 의견은 완전히 주관적입니다.

class << self 
    def get(race_date,track_name,race_number) 
    Race.where(:date => race_date, 
       :race_nbr => race_number, 
       :track_id => (Track.where(:track_code => track_name))) 
    end 
end 

class << self에 정의 된 모든 것은 클래스 메소드가됩니다.

다른 옵션은 범위를 사용하는 것입니다.

scope :get, 
     lambda { |race_date, track_name, race_number| 
       Race.where(:date => race_date, 
          :race_nbr => race_number, 
          :track_id => (Track.where(:track_code => track_name))) } 

이 마지막 해결책은 범위로 약간 무거워 보이는, 그래서 대신 범위이 경우 클래스 메소드를 사용하는 것이 아마도 가장 좋습니다. 또한 설명이 포함 된 범위를 선호하지만 메서드 이름에도 적용됩니다. 두 개의 큰 응답 후

+0

멋진 추가 기능, +1 – apneadiving

4

, 나는 뭔가 다른 명시해야합니다 같은 느낌 : 콘솔이 이미 시작된 경우

, 당신이 다시로드 그래서 당신은 몇 가지 코드를 추가 한 생각하지 않습니다.

요 이렇게 간단히 입력 : 콘솔에서

reload! 

을 (= CTRL-C를 필요가 없습니다).

+0

멋진 점입니다. 콘솔 외부에서 편집하는 경우 필수 항목입니다. 나는 내가 어떻게 그것을 놓쳤는 지 모른다. +1 –

관련 문제