2012-03-14 67 views
1

我一直在下面這個教程,在線分配功能

http://ruby.railstutorial.org/chapters/sign-in-sign-out?version=3.2#top

,並在部分8.2.3有,我不明白一些奇怪的事情。它說,關於這個方法:

module SessionsHelper 

    def sign_in(user) 
    cookies.permanent[:remember_token] = user.remember_token 
    current_user = user 
    end 
end 

,並提到

CURRENT_USER =用戶

是必須defined.This的分配,是在我使用,因此大多數語言奇怪的原因遠在我想分配一個值時,我只是使用「=」符號。

所以他繼續定義這個功能:

def current_user=(user) 
    @current_user = user 
    end 

他爲什麼不只是使用過嗎?

module SessionsHelper 

    def sign_in(user) 
    cookies.permanent[:remember_token] = user.remember_token 
    @current_user = user 
    end 
end 

是上述方法錯誤嗎?

回答

1

@current_user是一個實例變量。不要將裸露的實例變量暴露給整個世界被認爲是一個好習慣。相反,你爲它定義getter和setter。例如,在setter中,您可以進行有效性檢查。或觸發回調。或者推/彈出某種狀態。

這只是簡單的方便,安全和靈活。代碼只需幾行代碼。

另外,在ruby中,這是在語言級別執行的。你不能簡單地訪問實例變量。

class Foo 
    def initialize 
    @bar = 1 
    end 
end 

puts [email protected] # raises exception