我有更新模型属性然后调用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
有人可以建议可能会发生什么吗?
答案 0 :(得分:3)
将self添加到self.log_ids = new_ids.join ","
,否则您将只分配给本地变量(同名)而不是db-persisted属性(列)。