2012-12-19 1 views
4

chapter 8.2.3에서 설명한대로 필요한 할당 기능을 이해하는 데 끔찍한 시간을 보내고 있습니다. Hartl의 튜토리얼. 그가 언급"="(Hartl의 튜토리얼에서)을 사용할 수있을 때 할당 방법이 필요한 이유는 무엇입니까?

def sign_in(user) 
    cookies.permanent[:remember_token] = user.remember_token 
    self.current_user = user #<-- this line 
    end 

이 때문에 할당, 그것은 다음 별도로

def current_user=(user) 
    @current_user = user 
end 
로 정의해야합니다 :

은 문맥으로, 그는 다음 sign_in 함수의 두 번째 줄에 초점을 맞추고

여기서 current_user=지정 to current_user을 처리하도록 명시된 방법. 내 혼란은 다음과 같습니다.

  1. 왜 이렇게 필요한가요? 나는 단순한 =이 당신에게 물건을 할당 할 수 있다고 생각했다. 예를 user.email = [email protected] 또한

  2. , 결국 그는 redirect_to current_user을 코딩 할 경우, 어떻게 SessionsController에 속하는 일이 UsersController에 의해 제어되는보기로 번역됩니까?

감사합니다.

답변

5
이유는이 메소드 호출 및 변수 할당과 (인터프리터/VM에 대한) 혼동을 피하기 위해로 필요하고

def foo 
    # Two completely different things! 
    bar = "baz" # assigns baz to local variable bar 
    self.bar = "baz" # invokes the bar= method with parameter of baz 
end 

그는 먼저 current_user= 메소드를 호출, 두 가지 일을하고 있는지가 무엇 일어나고 두 번째로는 @current_user으로 설정하십시오 (좋은 예는 아니므로 세션 변수 설정과 같은 방법으로 current_user=을 만들면 실제로 더 많은 일을 끝낼 수 있습니다).

둘째 redirect_to current_userredirect_to user_path(current_user)과 같습니다. redirect_to가 취할 수있는 다양한 매개 변수 종류를 설명하는 자세한 내용은 http://api.rubyonrails.org/classes/ActionController/Redirecting.html을 확인하십시오. 렌더링이 아니라 리디렉션이므로 두 번째 HTTP 요청이 여기에서 발생합니다.

+0

이것은 정말 좋은 설명입니다. 감사합니다! – daspianist

관련 문제