Tengo un modelo en un plugin. El modelo es Pfaffmananger::Server y la tabla es pfaffmanager_servers. Por razones propias, quiero tener campos personalizados para este modelo (espero que haya casos en los que quiera extender los datos del servidor que probablemente solo se usarán en unas pocas instancias y no quiero tener un montón de campos mayormente sin usar en el modelo).
Aquí está la migración que crea la tabla:
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
Si uso pfaffmanager_server_id en lugar de server_id, la migración falla porque no puede encontrar server_id, pero cuando uso pfaffmanager_server_id como nombre del campo, al intentar guardar un servidor después de crear un campo personalizado, obtengo:
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_...
Así que si la migración tiene el campo pfaffmanager_server_id, la migración falla, y si el nombre del campo es server_id, el guardado falla.
Estoy revisando save_custom_fields en concerns/has_custom_fields.rb, pero no termino de entender si hay alguna forma de sobrescribirlo.
¿Hay algo que pueda hacer aparte de refactorizar todo para usar server en lugar de pfaffmanager_server?