所以我有这个应用程序,您可以在其中创建用户,然后您可以将电影和节目添加到数据库中。就像IMDB上的坏版本一样?
现在..我有这个控制器:https://github.com/Veske/form/blob/ryhm/app/controllers/movies_controller.rb
我已经设置了电影的路线,并且它还有所有必要的视图文件..但是当我尝试在页面上编辑其中一部电影时:http://whatever.com/shows/1/edit例如,它会给我一个错误:
Couldn't find User with id=1
def correct_user
@user = User.find(params[:id])
redirect_to root_url unless current_user?(@user)
end
end
params
{"id"=>"1"}
现在..为什么我认为我抛出的参数是@user param,当我有专门为电影制作的更新和编辑控制器时?
答案 0 :(得分:2)
您似乎不理解routes。您使用params[:id]
的上下文是电影控制器,因此,id将是电影ID。与此同时,您使用相同的参数进行身份验证(?),从而为您提供错误。
对于基本身份验证,您可以使用会话哈希,对于更高级的身份验证,有很多宝石,设计最流行。
PS:使用rake routes
检查您的可用路线及其网址参数。
答案 1 :(得分:1)
这是MoviesController
,因此params[:id]
实际上是movie_id
,即您的网址“http://whatever.com/shows/1/edit”中的数字“1”。不是user_id
。所以它会在行@user = User.find(params[:id])
抛出异常。
我查看了您的代码,但找不到正确的user_id
应该来自哪里。 Movie
模型不belongs_to user
。您应该查看user
来自哪里。
答案 2 :(得分:1)
您的shows_controller.rb
文件在运行您正在调用的编辑操作之前调用correct_user
,并且它专门在第70行查找用户。因此,如果有错误,您将收到此错误没有ID为1的用户。
答案 3 :(得分:1)
当我有专门为电影制作的更新和编辑控制器时,为什么我认为我抛出的参数是@user参数?
因为您在控制器顶部有一个在编辑操作中调用的before_action过滤器。
您进入correct_user
方法,该方法正在使用基于params[:id]
查找用户。要测试这是您的实际问题,您可能需要尝试将控制器中的第68行更改为:
@user = User.last #quick fix
以上内容可以用作快速修复 - 只要您的用户已登录,您就不应该再次发布该错误。如果这样可以避免错误,那么您需要关注自己在控制器调用此User#id
方法时正确分配此correct_user
值。