سؤال

يحتوي نموذج فاتورتي على سمة 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 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top