Postgres的观点未被rspec认可

时间:2014-07-09 21:13:17

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

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

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

(其中' properties_view'是'属性'表格中的视图)

如何确保Rspec从Postgres正确加载视图?

2 个答案:

答案 0 :(得分:5)

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,然后重试。

答案 1 :(得分:0)

如果您不想切换到SQL模式格式,则使用风景优美的gem可能会有所帮助(Scenic Gem Gitub)。

它们允许您将SQL视图(也实现)添加到迁移中,也可以将它们添加到您的ruby模式中。

像魅力一样为我工作。