لدي نموذج في ملحق. النموذج هو Pfaffmananger::Server، والجدول هو pfaffmanager_servers. لأسباب معينة، أريد حقولًا مخصصة لهذا النموذج (أتوقع وجود طرق لأغراض معينة لتمديد بيانات الخادم قد تُستخدم فقط لعدد قليل من الحالات، ولا أريد وجود عدد هائل من الحقول غير المستخدمة في الغالب في النموذج).
إليك هجرة إنشاء الجدول:
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
إذا استخدمت pfaffmanager_server_id بدلاً من server_id، فإن الهجرة تفشل لأنها لا تستطيع العثور على server_id. ولكن عندما أستخدم pfaffmanager_server_id كاسم للحقل، وعند محاولة حفظ خادم بعد إنشاء حقل مخصص، أحصل على:
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_...
إذن، إذا كان الحقل في الهجرة هو pfaffmanager_server_id، تفشل الهجرة، وإذا كان اسم الحقل هو server_id، يفشل الحفظ.
أنا ألقي نظرة على save_custom_fields في concerns/has_custom_fields.rb، لكنني لم أستطع تحديد ما إذا كان هناك طريقة ما لتجاوز ذلك.
هل هناك شيء يمكنني فعله بخلاف إعادة هيكلة كل شيء لاستخدام server بدلاً من pfaffmanager_server؟