Я в настоящее время рассматривает сессии, и я наткнулся на довольно общий контроллер сессий я использовал раньше:Rails: 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