我正在通过一个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 %>
你可以看到,问题源于我的方法“signed_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
从我的理解,.是一种检查对象是否已定义的方法,因此对象未定义不应该生成错误,而是返回false?我在本教程中搜索了current_user的所有情况(在检查之前是否还有其他人遇到这个问题),我的代码似乎是正确的,所以我有点困惑,如果有人能够帮助我理解Ruby变量的方式应该被访问,为什么我的代码不工作我将不胜感激.
编辑:
我不知道这是否重要,因为我只是开始Rails和Ruby,但是我的用户控制器和视图正在使用帮助器SessionsHelper(它包含在我的应用程序控制器中)