Rails:对对象的更改不会坚持

Posted

技术标签:

【中文标题】Rails:对对象的更改不会坚持【英文标题】:Rails: Changes to object won't stick 【发布时间】:2010-06-08 18:59:51 【问题描述】:

我有一个名为voip_phone 的模型,它有一个属性schedule,它是一个字符串,用于跟踪哪些人在什么时间使用电话。这是schedule 的示例:

"monsunsattue13,08:45,15:15;wed13,09:00,17:30;thufri"

这是不起作用的模型代码:

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】:

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

见this article

简而言之,调用“self.schedule_will_change!”在实际更改之前。

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

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

【讨论】:

谢谢,zed! self.schedule_will_change!完美的把戏!

以上是关于Rails:对对象的更改不会坚持的主要内容,如果未能解决你的问题,请参考以下文章

Rails 迁移不会更改 schema.rb

Rails 5.2 数据表不会在页面更改时刷新数据

通过引用传递向量,但更改不会坚持 c++

Rails自动保存不保存对关联的更改

对对象成员、对象内部、向量内部所做的更改不会在方法结束后继续存在。 C++

Rails 5 - 使用 Audited gem 查看更改