ruby-on-rails - 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 模型运行良好。我的开发和测试数据库也是新创建的,所以我认为这些表没有任何问题。当我的表名是人员时,为什么此错误指的是“人员”关系?
解决方案
“人”这个词的复数形式是“人”,这就是为什么 Rails 尝试用这个名称来调用表的原因。更改表格名称或在模型中设置表格名称。
class Person < ApplicationRecord
self.table_name = 'persons'
end
请参阅命名约定。
推荐阅读
- c - 测试崩溃捕获意外信号:SIGSEGV (11)
- javascript - JS:SparkAR 效果脚本中可能出现未处理的 Promise Rejection
- java - 如何有效地将大字符串发送到 java selenium textarea 元素
- google-sheets - 从 Google ClassRoom 到 Google Sheets 的分数
- excel - 运行时错误 91:对象变量或未设置块变量
- python - 使用开放 API 对多个关键字进行 Web 抓取
- reactjs - 我是否正确包装了文本元素?
- javascript - Chartist.js - 如何制作可滚动的 x 轴?
- flutter - 未定义命名参数“child”。错误颤振 2.5.1
- python - Pandas ExcelWriter 将数据附加到工作表