【问题标题】:Where does a rails (3) application define what is supposed to happen in activesupport-3.0.0.rc/lib/active_support/testing/setup_and_teardown.rb?rails (3) 应用程序在哪里定义了 activesupport-3.0.0.rc/lib/active_support/testing/setup_and_teardown.rb 中应该发生的事情?
【发布时间】:2010-08-25 02:25:07
【问题描述】:

我生成了一个模型文件,但随后选择让它从另一个模型继承单表。我不必运行迁移,因为所有列都已经存在了。

现在每当我想运行测试时,我都会收到关于模型表不存在的抱怨。

所以我有 Product

test_should_update_article(ArticlesControllerTest):
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: products: DELETE FROM "products" WHERE 1=1
    AR/active_record/connection_adapters/abstract_adapter.rb:202:in `rescue in log'
    AR/active_record/connection_adapters/abstract_adapter.rb:194:in `log'
    AR/active_record/connection_adapters/sqlite_adapter.rb:135:in `execute'
    AR/active_record/connection_adapters/abstract/database_statements.rb:269:in `update_sql'
    AR/active_record/connection_adapters/sqlite_adapter.rb:139:in `update_sql'
    AR/active_record/connection_adapters/abstract/database_statements.rb:274:in `delete_sql'
    AR/active_record/connection_adapters/sqlite_adapter.rb:145:in `delete_sql'
    AR/active_record/connection_adapters/abstract/database_statements.rb:54:in `delete'
    AR/active_record/connection_adapters/abstract/query_cache.rb:16:in `delete'
    AR/active_record/fixtures.rb:551:in `delete_existing_fixtures'
    AR/active_record/fixtures.rb:513:in `block (4 levels) in create_fixtures'
    AR/active_record/fixtures.rb:513:in `each'
    AR/active_record/fixtures.rb:513:in `block (3 levels) in create_fixtures'
    AR/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
    AR/active_record/fixtures.rb:512:in `block (2 levels) in create_fixtures'
    AR/active_record/connection_adapters/abstract_adapter.rb:104:in `disable_referential_integrity'
    AR/active_record/fixtures.rb:503:in `block in create_fixtures'
    AS/active_support/benchmarkable.rb:55:in `silence'
    AR/active_record/fixtures.rb:502:in `create_fixtures'
    AR/active_record/fixtures.rb:961:in `load_fixtures'
    AR/active_record/fixtures.rb:926:in `setup_fixtures'
    AS/active_support/callbacks.rb:419:in `_run_setup_callbacks'
    AS/active_support/testing/setup_and_teardown.rb:34:in `run'

AR 是 /Users/janlimpens/.rvm/AS/ruby-1.9.2-rc2@rails3/AS/activerecord-3.0.0.rc/lib 的简写 AS for /Users/janlimpens/.rvm/AS/ruby-1.9.2-rc2@rails3/AS/activesupport-3.0.0.rc/lib/

我想知道我能做什么......

【问题讨论】:

    标签: ruby-on-rails ruby unit-testing activerecord


    【解决方案1】:

    假设您使用的是单表继承,因为 Product 模型继承自 Article Model。

    为此,您需要文章表中的“类型”列,该列将由“产品”填充 或任何其他继承 Article 模型的类。

    添加它,sql 查询将如下所示

    从articles.type = "Product"的文章中选择*

    【讨论】:

    • 已经有这样一个列并且持久化产品(类型列读取“产品”)有效。此查询必须来自其他地方...
    • 某个地方没有自动知道该产品现在是一篇文章而不是一个 activerecord::base
    • Hmm.. 测试有问题,你能把测试代码贴在这里。也是。此外,当您编写控制器测试时,使用模拟和存根将其与模型分离:)
    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2011-12-07
    • 2011-07-12
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多