2011-05-25 63 views
1
def current_user=(user) 
    @current_user = user 
end 

def user_from_remember_token 
    User.authenticate_with_salt(*remember_token) 
end 

def remember_token 
    cookies.signed[:remember_token] || [nil, nil] 
end 

1)我主要與def current_user =(user)混淆。什麼是=。我發現它將用戶對象作爲參數,但=符號的重點是什麼。引起混淆的方法語法

2)不知道爲什麼有*盈remember_token的。任何人都可以解釋嗎?

謝謝

回答

5

=在方法名的末尾是用於該分配一個值的方法一個語法糖。由於括號在Ruby中是可選的,因此您可以編寫foo.current_user = (bar)foo.current_user = bar。請注意後者看起來更自然。另請注意,您可以使用attr_writer :current_user

您還可以在Ruby的方法名稱中使用?!。按照慣例,前者表示要返回的布爾值,後者表示「危險的」方法(例如,修改對象而不是返回副本)。

*將傳遞給該方法的內容包裝成數組。它也可以在調用方法時使用,然後解開數組。

||是簡單的邏輯或;如果第一個操作數的計算結果爲nilfalse,則另一個將返回。通常您可能會發現foo ||= "bar",這意味着foo將獲得「bar」的值,除非它具有值(foo = foo || "bar")。

Ruby是一種偉大的語言,有很多這類怪癖。 Rubyist是值得一看的頁面。

+0

TLDR版本'=''?''!'在ruby中的方法名稱中都只是合法的字符。對他們沒什麼特別的。是什麼時候使用它們的慣例更重要。 – madlep 2011-05-25 11:07:45

+0

可以在方法名稱末尾使用'=','?'和'!'。當'irb'在聲明一個名爲'foo?bar'的方法時不會抱怨,它會記住這個方法是'foo?'。 – Sorrow 2011-05-25 11:18:12

+0

非常感謝,你真的回答了我的問題!仍習慣於使用紅寶石。我已經聽說過它的偉大的事情:) – BrianJakovich 2011-05-25 13:08:44

0

current_user之前的=號表示attr_writer方法。

這意味着

def current_user=(user) 
    @current_user = user 
end 

對於參考:

http://www.rubyist.net/~slagell/ruby/accessors.html  
http://apidock.com/ruby/Module/attr_writer 
http://ruby-doc.org/core/classes/Module.html 
1

current_user=(user)是一個二傳手,讓你做something.current_user = foo。該吸氣劑根據將current_user,看起來像

def current_user 
    @current_user 
end