Ich habe ein Modell in einem Plugin. Das Modell ist Pfaffmanager::Server, die Tabelle ist pfaffmanager_servers. Aus bestimmten Gründen möchte ich benutzerdefinierte Felder für dieses Modell haben (ich erwarte, dass es Anwendungsfälle gibt, in denen ich die Serverdaten erweitern möchte, die wahrscheinlich nur für wenige Instanzen benötigt werden, und ich möchte nicht eine riesige Anzahl von meist ungenutzten Feldern im Modell haben).
Hier ist die Migration, die die Tabelle erstellt:
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
Wenn ich pfaffmanager_server_id anstelle von server_id verwende, schlägt die Migration fehl, weil sie server_id nicht finden kann. Wenn ich jedoch pfaffmanager_server_id als Feldnamen verwende, erhalte ich beim Speichern eines Servers nach dem Erstellen eines benutzerdefinierten Feldes folgenden Fehler:
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_...
Wenn die Migration also das Feld pfaffmanager_server_id enthält, schlägt die Migration fehl, und wenn der Feldname server_id ist, schlägt das Speichern fehl.
Ich sehe mir save_custom_fields in concerns/has_custom_fields.rb an, kann aber nicht ganz herausfinden, ob es eine Möglichkeit gibt, dies zu überschreiben.
Gibt es etwas, das ich tun kann, ohne das Ganze komplett umzustellen und server anstelle von pfaffmanager_server zu verwenden?