Tenho um modelo em um plugin. O modelo é Pfaffmananger::Server e a tabela é pfaffmanager_servers. Por motivos específicos, quero ter campos personalizados para este modelo (espero que haja casos em que eu precise estender os dados do servidor de formas que provavelmente serão usadas apenas em algumas instâncias, e não quero uma infinidade de campos subutilizados no modelo).
Aqui está a migração que cria a tabela:
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 eu usar pfaffmanager_server_id em vez de server_id, a migração falha porque não consegue encontrar server_id. No entanto, quando uso pfaffmanager_server_id como nome do campo, ao tentar salvar um servidor após criar um campo personalizado, recebo o seguinte erro:
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_...
Ou seja, se a migração tiver o campo pfaffmanager_server_id, ela falha; se o nome do campo for server_id, a operação de salvar falha.
Estou analisando o método save_custom_fields em concerns/has_custom_fields.rb, mas não consigo identificar se há alguma maneira de sobrescrevê-lo.
Existe algo que eu possa fazer além de refatorar tudo para usar server em vez de pfaffmanager_server?