Rails 3:object.save正在将旧值写入数据库

时间:2012-01-02 02:27:00

标签: ruby-on-rails database ruby-on-rails-3

我有更新模型属性然后调用save!的代码。 Rails.logger.info调用显示模型认为它具有新值。但是save!调用执行的SQL编写是将旧值写入数据库。

首先,当我拨打save!时,它根本没有写任何数据库。我认为对象并不认为它的值由于某种原因而改变:changed?返回false,所以我使用_will_change!通知来强制写入。但现在它正在进行写作,但是使用旧值。

这不会发生在“rails console”命令行中:我可以更新属性,它将返回true changed?,让我成功保存。

从服务器日志中摘录如下。请注意,该对象认为它有{{1>} '1234,5678,1137',但写入数据库'1234,5678'

  

当前日志ID为[1234,5678]
  新的日志ID是[1234,5678,1137];将'1234,5678,1137'的log_ids写入具有脏真实的新闻列表13   SQL(2.0ms)UPDATE“news_lists”SET“log_ids”='1234,5678',“updated_at”='2012-01-02 02:12:17.612283'WHERE(“news_lists”。“id”= 13)

有问题的对象属性是log_ids,它是一个包含另一种对象的多个ID的字符串。

产生上述输出的源代码:

log_ids

有人可以建议可能会发生什么吗?

1 个答案:

答案 0 :(得分:3)

将self添加到self.log_ids = new_ids.join ",",否则您将只分配给本地变量(同名)而不是db-persisted属性(列)。