Rails教程ch.10 ex 2 - 未定义的方法`激活?'

时间:2016-03-28 13:31:41

标签: ruby-on-rails ruby railstutorial.org

我正在研究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的问题仍然存在,但我会为此创建另一个线程,因为它与此无关

1 个答案:

答案 0 :(得分:1)

错误消息告诉您undefined method 'activated?' for nil:NilClass。这基本上意味着您在activated?上致电nil。看起来之前的行没有找到用户。此外,你说User.find(params[:id])之前也提出过错误。当find找不到条目时,应该这样做。

您需要找出数据库中没有id=101用户的原因。你删除了那个用户吗?您是否将无效值传递给该方法?如何生成该方法的链接?