PG::Error: 错误:关系“users”不存在。

19

抱歉打扰你,但我对这个错误有很多问题。 首先,这是我的user_controller rspec文件

require 'spec/spec_helper'

describe UserController do

it "create new user" do
    post "create"
    assigns[:users].should_not be_new_record
end
end

这是我的UserController

 class UserController < ApplicationController
   def create
     @users = User.new
     if @users.save
       flash[:notice] = 'new user was successfully created.'
     else
       render :action => :new
     end
   end

   def new
     @user = User.new
   end
 end

我的routes.rb文件(我认为问题就在这里,不好意思因为我对这种语言还很陌生)。

Estaciones::Application.routes.draw do
  devise_for :users

  root :to => "home#index"
  resources :user
end

当我尝试测试我的user_controller_rspec时,我遇到了这个错误

失败:

1) UserController create new user
   Failure/Error: post "create"
   ActiveRecord::StatementInvalid:
     PG::Error: ERROR:  relation "users" does not exist
     LINE 4:              WHERE a.attrelid = '"users"'::regclass
                                             ^
     :             SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
                   FROM pg_attribute a LEFT JOIN pg_attrdef d
                     ON a.attrelid = d.adrelid AND a.attnum = d.adnum
                    WHERE a.attrelid = '"users"'::regclass
                    AND a.attnum > 0 AND NOT a.attisdropped
                  ORDER BY a.attnum
 # ./app/controllers/user_controller.rb:3:in `new'
 # ./app/controllers/user_controller.rb:3:in `create'
 # ./spec/controllers/user_controller_spec.rb:6

 Finished in 0.01722 seconds
 1 example, 1 failure

 Failed examples:

 rspec ./spec/controllers/user_controller_spec.rb:5 # UserController create new user

我该如何解决它...谢谢


你已经有一个正确的答案了,请接受它。 - panzhuli
2个回答

45

运行这个

 rake db:migrate

然后这样

 rake db:test:prepare

是的,你需要为rspec做这个。 - drhenner
1
我编辑了你的问题,使其看起来像真正的代码...下次在任何代码前面添加4个空格。 - drhenner
好的,谢谢。我尝试了你给我的解决方案,但现在提示出现了这个错误:抱歉打扰你。Failure/Error: post :create ActionView::MissingTemplate: Missing template user/new, application/new with {:handlers=>[:haml, :builder, :coffee, :erb], :locale=>[:en], :formats=>[:html]}. Searched in: * "#RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator:0x13728cbd8" - Asantoya
1
首先,为什么你有一个user_controller而不是users_controller?其次,你有一个app/views/user/new.html.erb文件吗? - drhenner
在Heroku部署后出现了相同的错误,这是由于创建新用户资源后推送引起的。使用Heroku工具包的命令是heroku run rake db:migrate - isimmons

3

另一种变体

在测试环境下,运行RAILS_ENV=test rake db:migrate命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接