【问题标题】:RSpec ActiveRecord::RecordNotFound Couldn't find User with 'id'=RSpec ActiveRecord::RecordNotFound 找不到具有 'id'= 的用户
【发布时间】:2016-03-02 18:45:30
【问题描述】:

关于这个主题有很多已回答的问题,但我似乎无法将答案应用于我的问题。我收到以下错误:

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 为 nil,但我似乎无法弄清楚原因。我对 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

...我已经为用户部分实现了 Devise。提前感谢您的帮助!

【问题讨论】:

  • 试试post :create, user_id: @user.id, item: { name: "name"}
  • 我试过了,错误变成:NoMethodError: undefined method `id' for nil:NilClass
  • 您没有在测试中定义@user。
  • 感谢您的帮助!

标签: ruby-on-rails ruby activerecord rspec devise


【解决方案1】:

您需要在使用它之前创建@user。你可以使用 factory_girl gem 或者直接做

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

希望这可行

【讨论】:

  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多