如果用户在随机URL中键入,则为NoMethodError

时间:2012-09-04 06:32:55

标签: ruby ruby-on-rails-3 ruby-on-rails-3.1

当用户输入网站中的任何随机字符串时,即localhost:3000/rfgfghlocalhost:3000/gfgfgf/fhh,它会抛出此随机错误。

我理解为什么它会抛出此错误,因为我正在检查视图中的用户是否为contracter,以及它们是否显示特定的缩写代码。我也使用slugs来显示特定的内容。如果用户转到localhost:3000/contracter,它会检查slug contracter,然后呈现页面。

有哪些解决方案可以消除此错误?是否可以将用户重定向到主页?

NoMethodError in Users#show

undefined method `contractor?' for nil:NilClass

1: <% if @user.contractor? %>
2:  <% title "#{@user.name}" %>

1 个答案:

答案 0 :(得分:2)

根据您看到的错误,这意味着您调用@myuser.contracter?之类的内容,其中@myuser为零。

如果用户不在数据库中,则找不到该用户,并将nil放在@myuser对象中。

要将用户重定向到主页,只需检查控制器中的变量是否为nil,并在必要时重定向,例如:

@myuser = User.find(params[:id]) # or params[:username]
if @myuser.nil? # check if nil
  redirect_to root_url, :notice => "User does not exist!" # redirect to home page
end