0

已解决:当没有人登录并且没有当前用户时,问题是在控制器中调用 current_user,它会引发错误,感谢您的努力/时间。

我希望人们能够在我的应用程序中查看个人资料页面,无论他们是否在我的网站上拥有帐户。目前我收到错误:

SQL:

Started GET "/users/1" for 127.0.0.1 at 2013-02-05 05:08:50 -0500
Processing by UsersController#show as HTML
Parameters: {"id"=>"1"}
User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", "1"]]
User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."remember_token" IS NULL LIMIT 1

NoMethodError (undefined method `microposts' for nil:NilClass):
app/controllers/users_controller.rb:34:in `show'

我认为它试图定义一个记住令牌,而当某人实际上没有登录时不应该有一个。

用户控制器:

def show
  @user = User.find_by_id(params[:id])
  @microposts = @user.microposts.paginate(page: params[:page])
  @micropost  = current_user.microposts.build
End
4

3 回答 3

0

find_by_foo实用程序不会抛出“Record-not-found”错误,而find-method 会。当find得到一个整数时,它会自动通过 Id 查找。

def show
  @user = User.find(params[:id])
  @microposts = @user.microposts.paginate(page: params[:page])
  @micropost  = current_user.microposts.build
End

如果没有具有此 id 的用户,这将抛出 RecordNotFound;结果,在生产中,404。

编辑:看到您更新的代码后,您的问题似乎出在current_user辅助方法上,而不是在 User.find 中。

于 2013-02-05T09:59:37.597 回答
0

试试这个..

 def show
   @user = User.find(params[:id])
   @microposts = @user.microposts.paginate(page: params[:page]) if !@user.nil?
   @micropost  = current_user.microposts.build
   End

它将避免错误。

于 2013-02-05T10:20:16.943 回答
0

问题是 current_user 为 nil 并且在没有人登录时在控制器中调用它。结果是它抛出了一个错误。

我添加了 if signed_in? 在那些包含 current_user 的特定行旁边,现在一切都正确呈现。

def signed_in?
  !current_user.nil?
end

def current_user
  @current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
于 2013-02-05T11:17:39.800 回答