Rails:ActiveRecord :: RecordNotFound – 找不到没有ID的用户
我目前正在开发一个上传图片的项目。 这些相册中有用户,相册和图片。 我已经达到了以用户身份创建专辑的程度(尚未完成会话,身份validation或登录,但已完成注册)。 我在表单提交Rails后收到错误
Couldn't find User without an ID
我注意到我的new.html.erb的url没问题:
http://localhost:3000/users/13/albums/new
(没问题)
但在我提交之后,它给了我一个错误,页面是:
http://localhost:3000/albums/58
(问题。url中没有user_id)
有谁知道为什么我的路线突然改变了,以及如何解决它? 错误发生在我的app / controllers / albums_controller.rb:14:在`show’中@user = User.find(params [:user_id])行。
new.html.erb
{ :id => "uploadform", :multipart => true } do |f| %>
albums_controller
def show @user = User.find(params[:user_id]) @album = @user.albums.find(params[:id]) @photo = @album.photos.build(params[:photo]) respond_to do |format| if @user.save format.html { redirect_to album_photo_path(@album), notice: 'Album was successfully created.' } format.json { render json: @album, status: :created, location: @album} else format.html { render action: "new" } format.json { render json: @album.errors, status: :unprocessable_entity } end end end def update end def edit end def create @user = User.find(params[:user_id]) @album = @user.albums.build(params[:album]) respond_to do |format| if @user.save format.html { redirect_to @album, notice: 'Album was successfully created.' } format.json { render json: @album, status: :created, location: @album} else format.html { render action: "new" } format.json { render json: @album.errors, status: :unprocessable_entity } end end end
路线
Pholder::Application.routes.draw do resources :users do resources :albums end resources :albums do resources :photos end
这是因为您在create方法中重定向的方式。 当您执行redirect_to @album
它使用对象,其状态和方法来查找重定向到的正确路径。 例如@album.persisted?
并且方法是GET,然后路径将是album_path
。 如果没有持久化,那么它将是new_album_path
。
如果您同时添加User对象,那么它将使用正确的ID评估user_album_path
的路径。
format.html { redirect_to [@user, @album], notice: 'Album was successfully created.' }
您的路线也可以做得更好。 通过指定
resources :albums do resources :photos end
当您已通过嵌套的user_album路由指定了对Albums资源的访问权限时,您实际上正在声明相册的路线,例如“/ albums”,“/ albums /:id”等。 要么做他的答案中提到的surase ,要么更好, 只是确定照片路线的范围 :
scope "/album" do resources :photos end
您可以指定已定义的嵌套路由(仅深度为2级),但这会增加混淆。 最好指定为:
resources :users do resources :albums do resources :photos end end
结帐http://guides.rubyonrails.org/routing.html#nested-resources