Rails: неверная ошибка типа наследования с одной таблицей

Итак, я работаю над переносом этого php-сайта с существующей базой данных, которую я не могу изменить для Rails. Существует таблица: Quotes с столбцом с именем type. Всякий раз, когда я пытаюсь создать модель этого и задаю тип, он сообщает мне следующую ошибку:

ActiveRecord::SubclassNotFound (Invalid single-table inheritance type: HOME is not a subclass of Quotes)

Я не понимаю, почему он думает о его наследовании, потому что он не должен. Мой метод создания выглядит следующим образом:

quote = Quotes.create(
  agent_id: agent.id,
  client_id: client.id,
  type: 'HOME',
  status: 0,
  date_created: DateTime.now 
)

Если я прокомментирую тип, все будет хорошо. Но с типом это ошибки.

Ответы

Ответ 1

Я решил это, установив для моделей inheritance_column значение nil. Модели Active Record могут наследовать из таблицы через атрибут :type, установив inheritance_column в nil, удалив этот атрибут, позволяющий иметь столбец базы данных с именем type

class Quote < ActiveRecord::Base
    self.inheritance_column = nil
end

Ответ 2

Мне очень жаль, что у меня есть потенциальная ошибка в коде, особенно в таких процессах, как создание модели. Лучше просто сменить зарезервированное слово на что-то еще и освободить себя, чтобы использовать столбцы наследования позже, если возникнет необходимость. Ниже приведено более чистое решение → переименовать имя столбца базы данных с помощью переноса

Он читает:

  • Выполнить $ > рельсы сгенерировать миграцию ChangeColumnName где, ChangeColumnName - это имя нашей миграции. Это может быть любое имя.
  • Теперь отредактируйте сгенерированный файл миграции в файле db/migrate/_change_column_name.rb

    class ChangeColumnName < ActiveRecord::Migration
    def change
    rename_column :table_name, :old_column, :new_column
    end
    end
    
  • $ > rake db: migrate

Вам нужно будет отредактировать контроллер и просмотреть файлы, например. если название модели - Product, вы, вероятно, отредактируете эти файлы.

  • /app/views/products/_form.html.erb
  • /app/views/products/show.html.erb
  • /app/controllers/products_controller.erb
  • /app/views/products/index.html.erb