Ruby on Rails: الطريقة الافتراضية التي تعزفها نموذج Modifiyng بمساعدة <<

StackOverflow https://stackoverflow.com/questions/3119008

سؤال

هناك تصديق على النماذج مع تعليق السمة (من النوع نص)

def Ratification < ActiveRecord::Base
  attr_accessor :add_comment
  def add_comment=(text)
    self.comment ||= ""
    self.comment << "\r\n" + text
  end
end

وإذا استخدمت add_comment = لا بأس قبل حفظ الكائن. بعد حفظ التغييرات تم إسقاطها.

>> r = Ratification.last
  Ratification Load (0.6ms)   SELECT * FROM `ratifications` ORDER BY ratifications.id DESC LIMIT 1
=> #<Ratification id: 8, user_id: 686, comment: "dasads", created_at: "2010-06-25 13:16:24", updated_at: "2010-06-25 13:38:36">
>> r.comment
=> "dasads"
>> r.add_comment="text"
=> "text"
>> r.comment
=> "dasads\r\ntext"
>> r.save
  SQL (0.7ms)   BEGIN
  SQL (0.2ms)   COMMIT
=> true
>> r.reload
  Ratification Load (1.6ms)   SELECT * FROM `ratifications` WHERE (`ratifications`.`id` = 8) 
=> #<Ratification id: 8, user_id: 686, comment: "dasads", created_at: "2010-06-25 13:16:24", updated_at: "2010-06-25 13:38:36">
>> r.comment
=> "dasads"

لماذا؟!

القضبان 2.3.8 روبي 1.8

هل كانت مفيدة؟

المحلول

HRRRM ... هذا غريب ، أرى سلوكًا مشابهًا من تطبيق Rails عندما أحاول القيام به:

@s.name << "test"

ثم إعادة التحميل ... الاسم الأصلي هو الحصول على إعادة تعيين!

ومع ذلك ، إذا قمت بذلك @s.name += "اختبار"

ثم حتى بعد إعادة التحميل ، يتم حفظ الاسم الجديد.

لست متأكدًا من السبب في أن << يتصرف هكذا ، لكنني عادةً ما أتخلف عن += في جميع الحالات ، لذلك لم ألاحظ ذلك من قبل. هل التغيير إلى += يساعدك؟

تحرير: بالنظر إلى واجهة برمجة التطبيقات ، ربما يكون ذلك لأن << يعدل السلسلة الأصلية ، في حين أن + أو + = يصنع سلسلة جديدة ، والتي تحتوي على القديم؟ ربما يحفظ القضبان بطريقة ما الأشياء التي تم تمييزها على أنها جديدة (بدلاً من تعديلها؟)

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