Является ли «Человек» запасным словом на рельсах? - PullRequest
1 голос
/ 17 мая 2019

Я создаю новую модель с именем "Person", но она возвращает созданную таблицу "people" в базе данных, которую я несколько раз пытался сгенерировать и уничтожить. Я даже изменяю файл миграции, чтобы создать имя таблицы "people" вместо "люди ", включая имя файла, но когда я пытался создать или получить данные, он говорит:

Mysql2::Error: Table 'database-name_development.people' doesn't exist: SHOW FULL FIELDS FROM `people`

Вот пример генерации:

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 ]

5 голосов
/ 17 мая 2019

Это связано с рамками Rails .Он имеет встроенное сопоставление от человек до людей .

Вы должны иметь возможность переопределить его с помощью следующего, который вы можете вставить в config/initializers/inflections.rb (или любое другое имя в этомпапка):

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.irregular 'person', 'persons'
end
0 голосов
/ 17 мая 2019

В рельсах по умолчанию используется имя множественного числа в качестве имени таблицы для любой модели.Если вы хотите использовать другое имя в модели, вы можете установить имя таблицы

class Person < ApplicationRecord
  self.table_name = "persons"
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...