首页 > 解决方案 > ActiveRecord::StatementInvalid: PG::UndefinedTable: 错误: 关系“人”不存在

问题描述

我正在尝试创建一个新的 rails 项目。这是我的架构:

ActiveRecord::Schema.define(version: 2020_07_22_184104) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "houses", force: :cascade do |t|
    t.string "address"
  end

  create_table "persons", force: :cascade do |t|
    t.string "name"
    t.integer "house_id"
  end

end

现在,当我尝试在 Rails 控制台中创建 Person 实例时,出现此错误:

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "people" does not exist
LINE 8:                WHERE a.attrelid = '"people"'::regclass
                                          ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                     pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
                     c.collname, col_description(a.attrelid, a.attnum) AS comment
                FROM pg_attribute a
                LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
                LEFT JOIN pg_type t ON a.atttypid = t.oid
                LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
               WHERE a.attrelid = '"people"'::regclass
                 AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum

from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/postgresql/database_statements.rb:63:in `exec'
Caused by PG::UndefinedTable: ERROR:  relation "people" does not exist
LINE 8:                WHERE a.attrelid = '"people"'::regclass

House 模型运行良好。我的开发和测试数据库也是新创建的,所以我认为这些表没有任何问题。当我的表名是人员时,为什么此错误指的是“人员”关系?

标签: ruby-on-rails

解决方案


“人”这个词的复数形式是“人”,这就是为什么 Rails 尝试用这个名称来调用表的原因。更改表格名称或在模型中设置表格名称。

class Person < ApplicationRecord
  self.table_name = 'persons'
end

请参阅命名约定


推荐阅读