我目前正在審查會議,我碰到一個非常通用的會話控制器我以前用過就來了:扶手:CURRENT_USER和會議澄清
module SessionsHelper
def sign_in(user)
self.current_user = user
cookies[:remember_token] = user.remember_token
end
def sign_out
self.current_user = nil
cookies[:remember_token] = nil
end
def signed_in?
!current_user.nil?
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def current_user=(user)
@current_user = user
end
end
而且我意識到,我的觀點多次使用CURRENT_USER。例如:
<% if current_user == @user %>
<%= current_user.name %>
<% else %>
This user is not you.
<% end %>
不過,我不明白爲什麼
current_user
是可訪問的,就好像它是一個實例變量。這不是一種方法嗎?爲什麼我可以像@current_user
一樣對待它,並從中取出屬性,如current_user.name
,current_user.age
等。我認爲這隻適用於實例變量。在第一個和第二個方法
sign_in(user)
和sign_out
中,self
是指什麼?這些被認爲是正確的類方法?
它可能會幫助初學者認識到current_user.name與current_user().name相同。這只是一個Ruby約定,當沒有參數時從函數調用中刪除括號。這與其他語言非常不同,其中沒有括號的函數名稱不調用函數,而是引用或指向函數的指針(例如,在JavaScript中,'function currentUser(); end; var myFxn = currentUser; var user = myFxn();')。 – MikeJ