У меня есть модель в плагине. Модель — Pfaffmananger::Server, таблица — pfaffmanager_servers. По определенным причинам я хочу добавить кастомные поля для этой модели (я предполагаю, что будут случаи, когда мне нужно расширить данные сервера, и это потребуется только для нескольких экземпляров; я не хочу добавлять в модель огромное количество полей, которые в основном не используются).
Вот миграция, создающая таблицу:
class CreatePfaffmanagerServerCustomField < ActiveRecord::Migration[6.0]
def change
create_table :pfaffmanager_server_custom_fields do |t|
t.integer :server_id, null: false
t.string :name, limit: 256, null: false
t.text :value
t.timestamps null: false
end
add_index :pfaffmanager_server_custom_fields, [:server_id, :name]
end
end
Если я использую pfaffmanager_server_id вместо server_id, миграция не выполняется, так как не может найти server_id. Однако, если я задаю имя поля как pfaffmanager_server_id, то при попытке сохранить сервер после создания кастомного поля возникает ошибка:
Pfaffmanager::ServerCustomField Load (0.4ms) SELECT "pfaffmanager_server_custom_fields".* FROM "pfaffmanager_server_custom_fields" WHERE "pfaffmanager_server_custom_fields"."server_id" = 1
(0.2ms) ROLLBACK
PG::UndefinedColumn: ERROR: column "pfaffmanager_server_id" of relation "pfaffmanager_server_custom_fields" does not exist
LINE 1: INSERT INTO pfaffmanager_server_custom_fields (pfaffmanager_...
Таким образом, если в миграции указано поле pfaffmanager_server_id, миграция не выполняется, а если имя поля server_id, то не удаётся сохранить данные.
Я изучаю метод save_custom_fields в файле concerns/has_custom_fields.rb, но пока не могу понять, есть ли способ переопределить его.
Есть ли что-то, что я могу сделать, кроме как полностью переписать код, используя server вместо pfaffmanager_server?