استخدام HasCustomFields في إضافة

شكرًا جزيلاً لك، ديفيد!

نعم. قد يكون هذا هو مشكلتي. أظن أن هذه هي رسالة الخطأ التي كان ينبغي أن أدرجها. ويمكنني جعل عملية الترحيل تعمل مع أي من الحقلين (على الرغم من أنه عند استخدام pfaffmanager_server_id كاسم للحقل، يصبح اسم الفهرس أطول من 63 حرفًا، لذا يجب أن أستخدم اسمًا مختلفًا للفهرس).

دعني أحاول مرة أخرى.

استخدام server_id كاسم للحقل

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::ServerCustomField Load (3.8ms)  SELECT "pfaffmanager_server_custom_fields".* FROM "pfaffmanager_server_custom_fields" WHERE "pfaffmanager_server_custom_fields"."server_id" = 1
   (1.4ms)  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. الآن، دعنا نستخدم pfaffmanager_server_id.

استخدام pfaffmanager_server_id كاسم للحقل

إليك عملية الترحيل:

class CreatePfaffmanagerServerCustomField < ActiveRecord::Migration[6.0]
  def change
    create_table :pfaffmanager_server_custom_fields do |t|
      t.integer :pfaffmanager_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,
      [:pfaffmanager_server_id, :name],
      name: 'index_pfaffmanager_server_custom_fields_on_server_id_and_name'

  end
end

وهذا ما يحدث عندما أحاول s.custom_fields (كان ما سبق قادرًا على إرجاع nil لهذا لكنه لم يفشل حتى حاولت حفظ حقل مخصص). أقوم بتسجيل نوع الحقل المخصص هنا هنا):

 pry(main)> s.custom_fields
   (1.1ms)  SELECT "pfaffmanager_server_custom_fields"."name", "pfaffmanager_server_custom_fields"."value" FROM "pfaffmanager_server_custom_fields" WHERE "pfaffmanager_server_custom_fields"."server_id" = 1 ORDER BY id asc
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column pfaffmanager_server_custom_fields.server_id does not exist
LINE 1: ...e" FROM "pfaffmanager_server_custom_fields" WHERE "pfaffmana...
                                                             ^

from /home/pfaffman/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rack-mini-profiler-2.3.0/lib/patches/db/pg.rb:69:in `exec_params'
Caused by PG::UndefinedColumn: ERROR:  column pfaffmanager_server_custom_fields.server_id does not exist
LINE 1: ...e" FROM "pfaffmanager_server_custom_fields" WHERE "pfaffmana...
                                                             ^

الآن، هو يبحث عن server_id.

إذًا، يبدو أن custom_fields تريده بطريقة ما بينما save_custom_fields تريده بطريقة أخرى.

هل لا يهتم بما هو اسم الفهرس؟