Rails AR التحقق من صحة_
-
23-09-2019 - |
سؤال
هل من الممكن التحقق من صحة تفرد سمة نموذج الطفل المخصصة ضد علاقة متعددة الأشكال؟
على سبيل المثال لدي نموذج يسمى 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