سؤال

في نموذج القضبان الخاصة بي، لدي خاصية عشرية تسمى 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

هذا يعمل بشكل جيد فقط.

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