【发布时间】: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