使用Rails 3.2.18和Postgres,我有一些表,我已经创建了一个视图来最小化ActiveRecord加载的数据。在应用程序中,一切似乎都正常运行,但当我尝试运行Rspec时,我得到:
ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: relation "properties_view" does not exist
(其中' properties_view'是'属性'表格中的视图)
如何确保Rspec从Postgres正确加载视图?
答案 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模式中。
像魅力一样为我工作。