2011-03-16 3 views
0

나는 액티브 인 '자동차'모델이 : DB에 차 테이블에서레일 3 : 오류 액세스 액티브 레코드 모델의 속성

class Car < ActiveRecord::Base 
... 
end 

사용할 수 '라는 열이 '는 부울 값을 보유합니다. 내가 좋아하는 모델 클래스에이 값을 액세스하려고 :

class Car < ActiveRecord::Base 
... 
if self.avaliable #error msg: undefined method 'available' 

end 
end 

하지만 " '가능'정의되지 않은 방법을"오류 메시지가있어, 그 이유는 무엇입니까? 자동차 모델의이 속성에 액세스하는 방법은 무엇입니까?

답변

0

당신은 당신이 방법으로 그것을

if self.avaliable #error msg: undefined method 'available' 

end 

을 마무리해야 클래스 본문에서 루비 코드 인라인을 쓸 수 없습니다. 그리고 (당신이 self.avaliable에 쓴하지 avaliable) 당신은 인스턴스 메소드입니다 before_filter

class Car < ActiveRecord::Base 
    before_filter :check_avaliable 

    def check_avaliable 
    if self.avaliable 
     ... 
    end 
    end 
end 
+0

예, 가능합니다. '클래스 Car BitOfUniverse

+0

@Tumtu, 고맙습니다, 저에게있어서 새로운 것입니다. – fl00r

1

available에서 호출 할 수 있습니다 당신은 클래스에서 인스턴스 메서드에 액세스 할 수 없습니다.

예를 들어, 유효한 인스턴스가 필요하기 때문에 인스턴스 메소드 및 클래스 메소드에 액세스 할 수 있지만 인스턴스 메소드에 액세스 할 수없는 클래스에서 액세스 할 수 있습니다.

이제 질문은 : 당신은 무엇을하려고합니까? 우리는 당신이 무엇을하려고하는지 알려주면 아마도 더 나은 대답을 줄 수있을 것입니다.

0

이 self.available 폼을 클래스의 클래스 메소드라고 부르는 경우에는 먼저 Car 클래스의 @car 객체를 만들어야합니다. 그러면 @ car.available을 쉽게 호출 할 수 있습니다.

그렇지 않으면 클래스의 인스턴스 메소드를 호출하여 호출 객체를 사용할 수 있으면 self.available이 작동합니다.

클래스 메서드 Vs 인스턴스 메서드 및이를 호출하는 방법을보다 명확하게 보려면 여기를 살펴보십시오. http://railstips.org/blog/archives/2009/05/11/class-and-instance-methods-in-ruby/