我正在创建一个名为“ Person”的新模型,但它会在数据库中返回创建的“ people”表,我已尝试多次生成和销毁该表,甚至将迁移文件更改为创建表名“ persons”,而不是“人”,包括文件名,但是当我尝试创建或获取数据时,它说:
Mysql2::Error: Table 'database-name_development.people' doesn't exist: SHOW FULL FIELDS FROM `people`
以下是generate的示例:
rails g model Person
Running via Spring preloader in process 17268
invoke active_record
create db/migrate/20190517080311_create_people.rb
create app/models/person.rb
invoke rspec
create spec/models/person_spec.rb
文件:20190517080311_create_people.rb
class CreatePeople < ActiveRecord::Migration[5.1]
def change
create_table :people do |t|
t.timestamps
end
end
end
答案 0 :(得分:5)
这归因于Rails的inflections framework。它具有person to people的内置映射。
您应该可以使用以下内容覆盖它,您可以将其放在config/initializers/inflections.rb
(或该文件夹中的其他任何名称)中:
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.irregular 'person', 'persons'
end
答案 1 :(得分:0)
在rails中,对于任何模型,默认使用复数名称作为表名称。如果要在模型中使用其他名称,可以设置表名称
class Person < ApplicationRecord
self.table_name = "persons"
end