我最近开始研究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,这在更新调用中会发生。我可以使用备用呼叫,还是设置这些属性的更好方法?或者,有没有更好的方法来逐步更新属性?
答案 0 :(得分:0)
我没有使用.update()
而是将代码更改为使用.update_attributes
,而是允许我使用.has_changed?
检查对象是否已更改,如@icicle所示。然后,我可以在使用.save
提交更改之前执行适当的操作。