未定义的方法' id' for nil:NilClass,Ruby on Rails

时间:2015-10-27 18:48:59

标签: ruby-on-rails ruby activerecord

我一直收到这个错误,我不知道为什么。

这是我的用户控制器:

def show
    @user = User.find_by(id: params[:id])
end

以及我尝试过的事情

@user = User.find_by_id(params[:id])

@user  = User.find(params[:id])

我目前的HTML:

<li><%= link_to "Profile", user_path(@user, show) %></li>

以及我的尝试:

<li><%= link_to "Profile", user_path(@user) %></li>

<li><%= link_to "Profile", user_path(@user.id) %></li>

<li><%= link_to "Profile", "/users/#{@user.id}" %></li>

<li><%= link_to "Profile", user_path %></li>

<li><%= link_to "Profile", user_show_path %></li>

帮助表示感谢。谢谢!

rake routes routes

4 个答案:

答案 0 :(得分:3)

请注意:find_by可以返回nil。所以你必须在使用前检查它。

def show
    @user = User.find_by(id: params[:id])
    unless @user
      render status: 404, nothing: true
    end
end

我认为这是你的理由。 find_by只返回nil

答案 1 :(得分:0)

您需要提供更多详细信息。我们需要确保您尝试访问实际存在的视图(用户)的用户。您可以通过以下方式做一些事情来检查:

$ rails console --sandbox
Loading development environment in sandbox (Rails 4.2.1)
Any modifications you make will be rolled back on exit
2.2.3 :001 > User.all.count
   (12.5ms)  SELECT COUNT(*) FROM "users"
 => 2
2.2.3 :002 > id = User.first.id
  User Load (1.2ms)  SELECT  "users".* FROM "users"  ORDER BY "users"."id" ASC LIMIT 1
 => 3
2.2.3 :003 > app.user_path(id: id)
 => "/users/3"
2.2.3 :004 >

确保User.all.count返回一个大于0的数字。如果它为0则没有用户,你需要创建一个。

答案 2 :(得分:0)

好的,这是捕获,我发现您已经使用了gem devise,并且您正尝试在CRUD上执行USER,因此设计了默认路由,以帮助用户控制日志记录进出是最重要的传统users行为。

请参考How To: Manage users through a CRUD interface
或请参阅之前的帖子Devise registration controller conflict with my own “registrations” controller
我希望能清除你们所有的疑虑。干杯

答案 3 :(得分:0)

我需要添加user_path(current_user)而不是尝试获取ID。谢谢大家!