روبي على القضبان إضافة وظيفة لنموذج تغيير العقار
-
19-09-2019 - |
سؤال
في نموذج القضبان الخاصة بي، لدي خاصية عشرية تسمى Toypter_WCB. أود ذلك إذا تم تغيير، عندما تم تغيير Toypoyer_WCB، تم تعيين بت القذرة على صواب. أرغب في تجاوز طريقة Setter Toypoyer_wcb. بأي طريقة للقيام بذلك (على وجه الخصوص باستخدام metaprogramming)؟
المحلول
لذلك في الواقع، اعتبارا من القضبان V2.1، تم خبز هذا في القضبان. إلقاء نظرة على وثائق activerecord :: القذرة. وبعد باختصار:
# Create a new Thing model instance;
# Dirty bit should be unset...
t = Thing.new
t.changed? # => false
t.employer_wcb_changed? # => false
# Now set the attribute and note the dirty bits.
t.employer_wcb = 0.525
t.changed? # => true
t.employer_wcb_changed? # => true
t.id_changed? # => false
# The dirty bit goes away when you save changes.
t.save
t.changed? # => false
t.employer_wcb_changed? # => false
نصائح أخرى
إذا كنت لا ترغب في استخدام السكك الحديدية المضمنة في وظائف بت القذرة (قل أنك ترغب في تجاوز لأسباب أخرى)، لا يمكنك استخدام طريقة الاسم المستعار (انظر تعليقاتي على إدخال ستيف أعلاه). ومع ذلك، يمكنك استخدام المكالمات إلى السوبر لجعلها تعمل.
def employer_wcb=(val)
# Set the dirty bit to true
dirty = true
super val
end
هذا يعمل بشكل جيد فقط.
لا تنتمي إلى StackOverflow