В настоящее время я прохожу учебное пособие по RoR (http://railstutorial.org/chapters/sign-in-sign-out#sec:signin_success - соответствующий раздел), которое кажется довольно хорошим, хотя при попытке просмотреть образец сайта я столкнулся со следующей проблемой.
Extracted source (around line #10):
7: <li><%= link_to "Home", root_path %></li>
8: <li><%= link_to "About", about_path %></li>
9:
10: <% if signed_in? %>
11: <li><%= link_to "Profile", current_user %></li>
12: <li><%= link_to "Sign out", signout_path, :method => delete %></li>
13: <% else %>
Как вы можете видеть, проблема связана с моим методом "signature_in?" который должен проверять, вошел ли пользователь в систему или нет, проверив, установлена ли переменная current_user (я включил остальную часть кода от помощника, чтобы дать контекст, извинения):
module SessionsHelper
def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
current_user = user
end
def sign_out
cookies.delete[:remember_token]
current_user = nil
end
def current_user= (user)
@current_user ||= user_from_remember_token
end
def signed_in?
!current_user.nil?
end
private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end
def remember_token
cookies.signed[:remember_token] || [nil, nil]
end
end
Насколько я понимаю, .nil? метод, который проверяет, был ли определен объект и, следовательно, неопределенный объект не должен генерировать ошибку, а скорее возвращать false? Я искал учебник для всех случаев current_user (перед проверкой, чтобы увидеть, если кто-то еще имел эту проблему с небольшим успехом), и мой код кажется правильным, поэтому я немного запутался, и если кто-нибудь сможет помочь мне понять, как переменные Ruby должен быть доступен, и почему мой код не работает, я был бы очень признателен.
Edit:
Я не уверен, что это важно с областью видимости, поскольку я только начинаю и Rails, и Ruby, однако вспомогательный SessionsHelper используется моим контроллером Users и представлениями (он включен в мой контроллер Applications)