@으로 시작하는 변수를 인스턴스 변수로 사용하세요.
귀하의 시나리오에서 http 요청을 시작하면 레일 라우팅 메커니즘이 응답을 위해 MyController의 인덱스 메소드와 일치합니다.
따라서 다음과 같은 일이 발생합니다:
1. MyController 인스턴스를 초기화하고 인덱스 메소드를 실행합니다.
2. 컨트롤러의 인스턴스 변수 @output을 '123'으로 설정합니다.
3. 렌더링을 구체적으로 지정하지 않았으므로 기본적으로 index.html.erb가 렌더링됩니다
4. 컨트롤러의 모든 인스턴스 변수를 복사합니다(복사하면 안되는 일부는 제거)
5. 뷰를 인스턴스화하고 방금 컨트롤러에서 복사한 인스턴스 변수를 뷰에 설정합니다.
6. 이런 방식으로 뷰에서 이 인스턴스 변수를 가져올 수 있습니다.
Ruby의 @var는 클래스의 모든 메소드에서 액세스할 수 있는 인스턴스 변수입니다. @가 포함되지 않은 변수의 범위는 현재 메소드 내에 있습니다.
ROR은 현재 메소드가 실행된 후 다른 메소드를 호출하여 템플릿을 렌더링하는 것입니다. 이런 방식으로 두 메서드 간에 변수를 전달하는 가장 편리한 방법은 인스턴스 변수를 사용하는 것입니다. 일반 변수를 사용하여 범위를 벗어나면 당연히 오류가 보고됩니다.
@로 시작하는 변수는 Ruby의 인스턴스 변수이고, @@로 시작하는 변수는 클래스 변수입니다.
Rails에서는 인스턴스 변수를 통해 컨트롤러와 뷰 간에 데이터가 전달됩니다. 이 프로세스는 기본값이므로 명시적으로 전달할 필요가 없습니다.
이 규칙만 기억하세요.
Ruby의 @는 Python의 self와 동일합니다
@
으로 시작하는 변수를 인스턴스 변수로 사용하세요.귀하의 시나리오에서 http 요청을 시작하면 레일 라우팅 메커니즘이 응답을 위해 MyController의 인덱스 메소드와 일치합니다. 따라서 다음과 같은 일이 발생합니다:
1. MyController 인스턴스를 초기화하고 인덱스 메소드를 실행합니다.
2. 컨트롤러의 인스턴스 변수 @output을 '123'으로 설정합니다.
3. 렌더링을 구체적으로 지정하지 않았으므로 기본적으로 index.html.erb가 렌더링됩니다
4. 컨트롤러의 모든 인스턴스 변수를 복사합니다(복사하면 안되는 일부는 제거)
5. 뷰를 인스턴스화하고 방금 컨트롤러에서 복사한 인스턴스 변수를 뷰에 설정합니다.
6. 이런 방식으로 뷰에서 이 인스턴스 변수를 가져올 수 있습니다.