이것은 Ruby의 일반적인 동작입니다.이 방법으로 범위 밖의 로컬 변수에 액세스 할 수는 없습니다. 실제로 이러한 메서드를 사용하는 것은 매우 드뭅니다. 클래스, 예컨대 : 여기
class Foo
object = 7
# use object in some way in defining the class...
def bar
# object not available here
puts object
end
end
object
에 액세스 할 수있는 방법이 없습니다 bar
방법을 정의 할 때
당신은 그런 일을 볼 수 있습니다.
def foo
object = 7
def bar
puts object
end
end
을하지만이 이 같은 중첩 된 방법은 아닙니다주의 :
루비는 또한 당신의 슬림 코드를 컴파일 할 때 귀하의 경우에는 무슨 일이 일어나고 있는지에 가까운있는이 같은 구문을 수 있습니다 foo
을 호출하면 동일한 개체에 bar
이 정의되지만 에는 object
변수를 사용할 수없고 bar
을 호출하면 오류가 발생합니다.
이와 같은 내부 메소드에서 변수에 액세스하려면 인스턴스 변수 여야합니다. 예를 들면 다음과 같습니다.
- @object = ...
ruby:
def new_record_form?
@object.new_record?
end
일반적인 조언은 템플릿의 실제 코드를 최소한으로 유지하는 것입니다. 이 메소드를 도우미로 옮길 수도 있습니다 - 인스턴스 변수는 거기에서 사용할 수 있습니다.
범위 지정은 나에게 분명했지만 문제를 해결하기 위해 슬림 처리의 컨텍스트에서 범위가 어떻게 배열되었는지 확실하지 않았습니다. 이 특별한 경우에 도우미가 많은 의미를 가지지 않는 이유에 대해 자세히 설명하지는 않더라도 인스턴스 변수 솔루션은 좋은 접근 방법으로 보입니다. 감사! –