【问题标题】:Postgres views not recognized by rspecrspec 无法识别 Postgres 视图
【发布时间】:2014-07-09 21:13:16
【问题描述】:

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

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

(其中“properties_view”是“properties”表上的视图)

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

【问题讨论】:

  • 您是否使用schema.rbstructure.sql 文件来跟踪您的数据库结构?
  • @muistooshort 是的!谢谢 - 这是一个非常有见地的问题。我确实有一个 schema.rb 文件,它不包含视图!我会进一步调查。

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


【解决方案1】:

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

【讨论】:

  • 我总是可以从 SO 中学到一些东西。 :) 我认为这可能有依赖于数据库的东西?警告购买者。
  • @zetetic: 是的,structure.sql 将依赖于数据库,但是 (a) 视图也是如此,并且 (b) 数据库可移植性在很大程度上是一个神话,除非你用硬方法(即手工硬方式)。
【解决方案2】:

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

它们允许您将 SQL 视图(也已具体化)添加到迁移中,并将它们添加到您的 ruby​​ 架构中。

像魅力一样为我工作。

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 2021-09-21
    • 1970-01-01
    相关资源
    最近更新 更多