【问题标题】:ActiveRecord::StatementInvalid: Could not find table 'tablename'ActiveRecord::StatementInvalid: 找不到表 'tablename'
【发布时间】:2010-10-13 06:45:32
【问题描述】:
cis.statbib.org: script/console 
Loading development environment (Rails 2.2.2)
Article.founc>> Article.count()
ActiveRecord::StatementInvalid: Could not find table 'article'
    from /home/hadley/web/cis.statbib.org/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb:29:in `table_structure'
    from /home/hadley/web/cis.statbib.org/vendor/rails/activesupport/lib/active_support/core_ext/object/misc.rb:39:in `returning'
...

但它似乎确实在数据库中:

db: sqlite3 development.sqlite3 
SQLite version 3.2.8
sqlite> select count(*) from author;
168600

我刚刚更新了我所有的宝石等。出了什么问题?

【问题讨论】:

  • 它正在寻找文章,但您正在检查作者。
  • 对于Article 模型,它应该查找“文章”表。你有没有在任何地方打电话给set_table_name?您的控制台示例查看“作者”表(无论如何应该是“文章”)。
  • 糟糕,这只是一个愚蠢的错字。我在文章的 sql 中有一个正数,在控制台中使用 Author.count() 出现同样的错误。
  • 那么表名呢?当您使用Article 进行操作时,它通常会查找“文章”。你在用set_table_name吗?
  • 我正在使用 ActiveRecord::Base.pluralize_table_names = false - 但这应该不是问题,不是吗?我的表名是单数。

标签: ruby-on-rails sqlite


【解决方案1】:

这似乎是由 ActiveRecord 中的错误引起的,http://rails.lighthouseapp.com/projects/8994/tickets/99-sqlite-connection-failing。按照该链接中的说明对文件进行猴子修补修复了问题。

【讨论】:

    【解决方案2】:

    正如 Sarah Mei 在 cmets 中已经指出的那样,您正在手动检查“作者”而不是“文章”。

    但是,这里也可能存在其他问题。您是否有意在模型中将表名设置为“article”?默认情况下,这应该是寻找“文章”(复数)表,所以我怀疑还有更多我们没有看到的代码可能会导致问题。

    【讨论】:

    • 是的,表名是article,我在environment.rb中有ActiveRecord::Base.pluralize_table_names = false(我所有的表名都是单数)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    相关资源
    最近更新 更多