كيفية حماية سمة نموذج القضبان؟
-
02-07-2019 - |
سؤال
يحتوي نموذج فاتورتي على سمة Address_id، ولا أريد أن يتغير عنوان_id هذا إلى الأبد.لذلك لا أريد أن يحدث هذا خارج الفصل:
invoice.address_id = 1
invoice.address = some_address
تضيف ريلز تلقائيًا سمة Address_id هذه إلى النموذج من جدول الفاتورة، فكيف يمكنني إعلان أن هذه السمة خاصة/محمية؟الاتصال
attr_protected :address_id
على الأرجح ليس هو الحل لأنه بناءً على الوثائق فإنه يمنع التعيينات الجماعية فقط.
شكرًا!
المحلول
انت تريد attr_readonly
.
نصائح أخرى
ليست جميلة مثل سطر واحد، ولكن يجب أن تعمل التعليمات البرمجية أدناه (ويمكنك دائمًا إجراء بعض البرمجة الوصفية لكتابة طريقة "غير قابلة للتغيير")
def address_id=(id)
if new_record?
write_attribute(:address_id, id)
else
raise 'address is immutable!'
end
end
لا تنتمي إلى StackOverflow