2016-03-02 77 views
0

關於這個話題有很多回答的問題,但我似乎無法將答案應用於我的問題。我收到以下錯誤:RSpec ActiveRecord :: RecordNotFound用'id'找不到用戶=

ItemsController POST create redirect to show page 
    Failure/Error: @user = User.find(params[:user_id]) 

    ActiveRecord::RecordNotFound: 
     Couldn't find User with 'id'= 

我知道原因的錯誤是因爲user_id是零,但我似乎無法找出原因。我還是比較新的Rails,所以如果這是一個非常簡單的修復方案,請原諒我。

RSpec的測試

require 'rails_helper' 
RSpec.describe ItemsController, type: :controller do 

    describe "POST create" do 
    it "redirect to show page" do 
     post :create, user_id: @user, item: { name: "name"} 
     expect(response).to redirect_to(user_show_path) 
    end 
    end 
end 

項目控制器

class ItemsController < ApplicationController 

    def create 
    @user = User.find(params[:user_id]) 
    @item = Item.new(item_params) 
    @item.user = current_user 
    if @item.save 
     @item = Item.update_items(params[:items]) 
     redirect_to current_user, notice: "Item was saved successfully." 
    else 
     flash[:error] = "Error creating item. Please try again." 
     render user_show_path 
    end 
    end 


    private 

    def item_params 
    params.require(:item).permit(:name) 
    end 
end 

路線

user_items POST /users/:user_id/items(.:format) items#create 

...我已經我爲用戶部分配置設計。先謝謝您的幫助!

+0

嘗試'後:創建,USER_ID:@ user.id,項目:{名稱: 「名稱」}' –

+0

我想,和錯誤變成:NoMethodError:未定義的方法'id'爲零:NilClass – Tucker

+1

您沒有在您的測試中定義@user。 – BroiSatse

回答

1

您需要在使用之前創建@user。您可以使用factory_girl寶石或者直接做

@user = User.create 
post :create, user_id: @user.id, item: { name: "name"} 

希望這個作品

+0

謝謝你的幫助! – Tucker

相關問題