Postgres的观点未被rspec认可

使用Rails 3.2.18和Postgres,我有一些表,我已经为其创建了一个视图,以最小化ActiveRecord加载的数据。 在应用程序中,一切似乎都正常运行,但当我尝试运行Rspec时,我得到:

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "properties_view" does not exist 

(’properties_view’是’properties’表中的视图)

我该怎么做才能确保Rspec从Postgres正确加载视图?

Rails并不真正理解像视图这样的“高级”数据库概念,因此它们不会出现在schema.rb 。 当rspec设置其测试数据库时,它将使用schema.rb来创建数据库模式,因为在schema.rb找不到您的视图,您将无法在测试数据库中找到您的视图,而rspec将使用一切都崩溃了。

解决方案是从schema.rb切换到structure.sql 。 您应该能够更新config/application.rb来说:

 config.active_record.schema_format = :sql 

然后做一个rake db:structure:dump来生成structure.sql文件。 完成后,从文件系统和版本控制中删除schema.rb ,添加structure.sql ,然后重试。