Ho un modello in un plugin. Il modello è Pfaffmananger::Server, la tabella è pfaffmanager_servers. Per motivi specifici, voglio avere campi personalizzati per questo modello (mi aspetto che ci siano casi in cui vorrò estendere i dati del server che saranno probabilmente utilizzati solo per alcune istanze e non voglio un numero enorme di campi per lo più inutilizzati nel modello).
Ecco la migrazione che crea la tabella:
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
Se uso pfaffmanager_server_id invece di server_id, la migrazione fallisce perché non riesce a trovare server_id, ma quando uso pfaffmanager_server_id come nome del campo, dopo aver creato un campo personalizzato, quando provo a salvare un server ottengo:
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_...
Quindi, se la migrazione ha il campo pfaffmanager_server_id, la migrazione fallisce, e se il nome del campo è server_id, il salvataggio fallisce.
Sto esaminando save_custom_fields in concerns/has_custom_fields.rb, ma non riesco proprio a capire se esiste un modo per sovrascriverlo.
C’è qualcosa che posso fare oltre a rifattorizzare tutto per usare server invece di pfaffmanager_server?