ruby - 在ror中正确的将变量传到view的做法是怎么的?
黄舟
黄舟 2017-04-21 11:17:50
0
4
752

初学ruby,ror中生成了一个controller和view,代码如下:

class MyController < ApplicationController
  def index
    @output="123"
  end
end

我的问题是,为什么变量必须加上AT才能传入view?如果去掉AT,就会报错,AT是什么关键字还是框架约定?什么原理?如果可以请告诉我通识的写法,谢谢

也许这个问题太无聊,但我不太清楚该如何描述,所以也没有搜索到相关信息。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(4)
巴扎黑

Ruby의 @var는 클래스의 모든 메소드에서 액세스할 수 있는 인스턴스 변수입니다. @가 포함되지 않은 변수의 범위는 현재 메소드 내에 있습니다.

ROR은 현재 메소드가 실행된 후 다른 메소드를 호출하여 템플릿을 렌더링하는 것입니다. 이런 방식으로 두 메서드 간에 변수를 전달하는 가장 편리한 방법은 인스턴스 변수를 사용하는 것입니다. 일반 변수를 사용하여 범위를 벗어나면 당연히 오류가 보고됩니다.

Ty80

@로 시작하는 변수는 Ruby의 인스턴스 변수이고, @@로 시작하는 변수는 클래스 변수입니다.
Rails에서는 인스턴스 변수를 통해 컨트롤러와 뷰 간에 데이터가 전달됩니다. 이 프로세스는 기본값이므로 명시적으로 전달할 필요가 없습니다.

이 규칙만 기억하세요.

Peter_Zhu

Ruby의 @는 Python의 self와 동일합니다

黄舟

@으로 시작하는 변수를 인스턴스 변수로 사용하세요.
귀하의 시나리오에서 http 요청을 시작하면 레일 라우팅 메커니즘이 응답을 위해 MyController의 인덱스 메소드와 일치합니다. 따라서 다음과 같은 일이 발생합니다:
1. MyController 인스턴스를 초기화하고 인덱스 메소드를 실행합니다.
2. 컨트롤러의 인스턴스 변수 @output을 '123'으로 설정합니다.
3. 렌더링을 구체적으로 지정하지 않았으므로 기본적으로 index.html.erb가 렌더링됩니다
4. 컨트롤러의 모든 인스턴스 변수를 복사합니다(복사하면 안되는 일부는 제거)
5. 뷰를 인스턴스화하고 방금 컨트롤러에서 복사한 인스턴스 변수를 뷰에 설정합니다.
6. 이런 방식으로 뷰에서 이 인스턴스 변수를 가져올 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿