2011-02-10 3 views
3

나는 내 모델에서 다음과 같은 방법을 가지고레일에 모델 객체 내에서 접근 메소드를 호출

모델이라고 needs_review에 속성 내가 그것을 디버깅 할 때 그러나, 새로운로 저장,이
def reset_review_status 
    needs_review = true 
    save 
end 

변하기 쉬운. 내가 self.needs_review=true을하면 잘 동작합니다. 하나의 accepts_nested_attributes_for가 있지만, attr_accessible 절이 없습니다.

왜 이런 일이 벌어지고 있는지에 대한 생각이 있으십니까? 당신은 액티브 레코드의 속성을 정의 할 때

답변

4

다음 방법 당신은

needs_review = "hello" 

를 사용하여 세터를 호출 할 수 있습니다

# gets the value for needs_review 
def needs_review 
end 

# sets the value for needs_review 
def needs_review=(value) 
end 

사용할 수 있지만 이것은 당신이 변수를 설정 한 것과 같은 방법입니다. 메소드 내에서 명령문을 호출하면 Ruby가 변수 할당에 우선 순위를 부여하므로 해당 이름의 변수가 작성됩니다. 같은 이름의 지역 변수는 컨텍스트에있는 경우 선택적으로 self.method_name를 사용하는 방법

  • 내에서 세터를 호출 할 때

    1. 항상 self.method_name =를 사용 엄지 손가락의 규칙으로

      def one 
      # variable needs_review created with value foo 
      needs_review = "foo" 
      needs_review 
      end 
      
      one 
      # => returns the value of the variable 
      
      def two 
      needs_review 
      end 
      
      two 
      # => returns the value of the method needs_review 
      # because no variable needs_review exists in the context 
      # of the method 
      

  • 관련 문제