سؤال

هل من الممكن التحقق من صحة تفرد سمة نموذج الطفل المخصصة ضد علاقة متعددة الأشكال؟

على سبيل المثال لدي نموذج يسمى field الذي ينتمي إلى fieldable:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :name, :scope => :fieldable_id
end

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

هل أنا فقط أفعل هذا الخطأ أم أن هناك طريقة أفضل للقيام بذلك؟

هل كانت مفيدة؟

المحلول

ما عليك سوى توسيع نطاق النطاق لتشمل النوع الميداني:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :name, :scope => [:fieldable_id, :fieldable_type]
end

نصائح أخرى

يمكنك أيضًا إضافة رسالة لتجاوز الرسالة الافتراضية ، أو استخدام النطاق لإضافة التحقق من الصحة:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :fieldable_id, :scope => [:fieldable_id, :fieldable_type], :message => 'cannot be duplicated'
end

كمكافأة إذا ذهبت إلى en.yml الخاص بك ، وأدخل:

  activerecord:
    attributes:
     field:
       fieldable_id: 'Field'

ستحل محل "الموضوع" الافتراضي الذي تضيفه القضبان إلى الأخطاء التي تحددها هنا. لذا بدلاً من القول: Fieldable Id has been already taken أو هكذا ، سيقول:

 Field cannot be duplicated
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top