是“ Person”是备用词吗?

时间:2019-05-17 08:14:55

标签: ruby-on-rails ruby ruby-on-rails-5

我正在创建一个名为“ 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

2 个答案:

答案 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