J’ai un modèle dans un plugin. Le modèle est Pfaffmanager::Server et la table est pfaffmanager_servers. Pour des raisons spécifiques, je souhaite avoir des champs personnalisés pour ce modèle (je m’attends à ce qu’il existe des cas où je veux étendre les données du serveur, mais uniquement pour quelques instances, et je ne veux pas d’une multitude de champs peu utilisés dans le modèle).
Voici la migration qui crée la table :
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 j’utilise pfaffmanager_server_id au lieu de server_id, la migration échoue car elle ne peut pas trouver server_id. Cependant, lorsque j’utilise pfaffmanager_server_id comme nom de champ, lors de l’enregistrement d’un serveur après la création d’un champ personnalisé, j’obtiens l’erreur suivante :
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_...
Ainsi, si la migration contient le champ pfaffmanager_server_id, la migration échoue, et si le nom du champ est server_id, l’enregistrement échoue.
J’examine la méthode save_custom_fields dans concerns/has_custom_fields.rb, mais je ne parviens pas à déterminer s’il existe un moyen de la surcharger.
Existe-t-il une solution autre que de refactoriser entièrement le code pour utiliser server au lieu de pfaffmanager_server ?