逐步更新多个模型属性

时间:2014-08-17 00:42:53

标签: ruby-on-rails ruby ruby-on-rails-4

我最近开始研究Ruby on Rails,并且我已经建立了一个基本系统来扫描解析和XML数据源,将这些元素存储在MySQL数据库中。

我打算以设定的时间间隔将脚本作为rake任务运行以检测数据更改,我正在扫描来自多个区域的数据,并且当前设置了两个数据库表,Product和{{1} }。

Product Info存储在所有区域内持久存储的数据,名称和价格等非持久性数据与区域区域设置一起存储在Product表中。

为了检测我在ProductInfo中定义touch: true的更改,以确保ProductInfoController的{​​{1}}列被更改Product在XML数据解析期间发生了变化。

要更新我使用updated_at来捕获任何现有记录的值,然后我调用ProductInfo,从XML数据源传入所有属性。如果没有任何属性发生更改,则find_or_initialize_by表上的update列未在updated_at表上更改,但在ProductInfo表中仍会更改。

Product

所以问题是,只要在模型上调用save,就会调用touch,这在更新调用中会发生。我可以使用备用呼叫,还是设置这些属性的更好方法?或者,有没有更好的方法来逐步更新属性?

1 个答案:

答案 0 :(得分:0)

我没有使用.update()而是将代码更改为使用.update_attributes,而是允许我使用.has_changed?检查对象是否已更改,如@icicle所示。然后,我可以在使用.save提交更改之前执行适当的操作。