Ruby on rails 未定义的方法';id';对于nil:NilClass,RubyonRails
我一直在犯这个错误,我不知道为什么 这是我现在的用户控制器:Ruby on rails 未定义的方法';id';对于nil:NilClass,RubyonRails,ruby-on-rails,ruby,activerecord,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&g
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路由
请记住:
find\u by
可以返回nil。所以你必须在使用前检查一下
def show
@user = User.find_by(id: params[:id])
unless @user
render status: 404, nothing: true
end
end
我想这是你的案子
find_by
只返回nil您需要提供更多详细信息。我们需要确保您尝试访问的用户实际上存在一个视图(用户)。您可以通过以下方式进行检查:
$ 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,则没有用户,您需要创建一个。好的,这里有一个问题,我知道你已经使用了gem,你正试图在用户上执行CRUD
,所以设计默认的路由来帮助用户会话控制登录和注销是覆盖传统用户的行为。
请参考
或者请参考前面的帖子
我希望大家都明白疑惑
干杯我需要添加用户路径(当前用户)
而不是试图获取id。谢谢大家 请你做一下应用程序的rake routes
和postroutes
,好吗,这会更清楚then@chanakyadevraj我发布了一张路线图片请检查控制器的名称及其文件名控制器名称必须是userscoontroller
,文件名称应是users\u controller.rb
不要发布路线图片;张贴路线:(编辑为仅包括我们真正关心的用户。并包括routes.rb
文件的部分。如果每次尝试都失败,则首先尝试通过rails c
和fire用户在rails控制台中查找用户。所有并找到用户记录,如果有,猜测可能没有我们er
根据建议的身份,用户
和参数[:id]
肯定是nil
Hmm,现在它说“没有路由匹配{:action=>“show”,:controller=>“users”,:id=>nil}缺少所需的键:[:id]”在这一行:
并且当我将其更改为用户路径(@User.id)
上面说是零again@kdl所以你的用户是零?我已经这样做了,有一个用户,我甚至可以去“用户/1”,它会带我到显示页面。谢谢你!这帮了我很多忙。我不得不添加用户路径(当前用户)
哪个设计给你而不是试图获取id。很高兴它帮了你!干杯:)