我正在研究Michael Hartl的Rails教程(第3版)练习2
它由两部分组成,第二部分引发错误:
说明:用户想要访问其他用户的个人资料页面。当此帐户尚未激活时,想要访问的用户会被重定向到根页面(这很简单吗?)
我知道的代码应该完成这项工作:
(app/controllers/users_controller.rb)
def show
@user = User.find_by_id(params[:id])
redirect_to root_url and return unless @user.activated?
end
还有其他三个控制器文件我使用了activated?
方法,没有任何错误。但是在这个场合,我在访问未激活的用户页面时收到错误。
这是从控制台输出的:
Processing by UsersController#show as HTML
Parameters: {"id"=>"101"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ?
LIMIT 1 [["id", 101]]
Completed 500 Internal Server Error in 2ms (ActiveRecord: 0.2ms)
NoMethodError (undefined method `activated?' for nil:NilClass):
app/controllers/users_controller.rb:12:in `show'
导致错误的原因是什么?用户在数据库中仅未激活(激活= false)。
编辑:
发现导致错误的问题。我做了几个帐户,我也删除了。这很有用,但是id已经从我删除的最后一个中继续计算。所以下一个用户不低于101,低于107.重置数据库,现在它可以工作。谢谢sajinmp让我再次看看数据库。
id的问题仍然存在,但我会为此创建另一个线程,因为它与此无关
答案 0 :(得分:1)
错误消息告诉您undefined method 'activated?' for nil:NilClass
。这基本上意味着您在activated?
上致电nil
。看起来之前的行没有找到用户。此外,你说User.find(params[:id])
之前也提出过错误。当find
找不到条目时,应该这样做。
您需要找出数据库中没有id=101
用户的原因。你删除了那个用户吗?您是否将无效值传递给该方法?如何生成该方法的链接?