Rails:对象的更改不会粘

时间:2010-06-08 18:59:51

标签: ruby-on-rails model save

我有一个名为voip_phone的模型,它有一个属性schedule,这是一个字符串,可以跟踪哪些人在哪个时间使用手机。以下是schedule

的示例

"mon{}sun{}sat{}tue{13,08:45,15:15;}wed{13,09:00,17:30;}thu{}fri{}"

以下是不起作用的型号代码:

def add_shift(days, person_id, time_from, time_to)  
    return false if shift_overlap?(days, time_from, time_to)  
    days.each do |d|  
        insert_point = self.schedule.index(d)+4  
        self.schedule.insert(  
            insert_point, [person_id.to_s, time_from, time_to].join(",") + ";")  
    end  
    save!  
end

无论我做什么,我都无法使用这种方法。这是控制台的读数:

v = VoipPhone.find(5)  
=> blah, blah, blah  
v.add_shift(["thu", "fri"], 13, "08:45", "15:15")  
=> true  

这似乎有效,但改变不坚持。呼叫v.schedule会显示新的时间表,但呼叫VoipPhone.find(5).schedule仍会显示旧的时间表。调用v.save会返回true,但更改仍然不会发生!

任何可以提供给无业者灵魂的帮助都将非常感激:)

1 个答案:

答案 0 :(得分:1)

您正面临Rails 2.3 AFAIR中引入的“脏属性”优化

请参阅this article

简而言之,请拨打“self.schedule_will_change!”在实际改变它之前。

如果它不适合您,那么您可以使用'dup'解决方法,如:

self.schedule = self.schedule.insert(....).dup