我最近开始研究Rails,并建立了一个基本系统来扫描解析和XML数据源,将元素存储在MySQL数据库中。
我打算以设定的间隔运行脚本作为rake任务,以检测数据更改,我正在扫描来自多个区域的数据,目前设置了两个数据库表,Product和Product Info。
Product存储跨越所有区域的持久数据,不持久的数据(如名称和价格)与区域区域设置一起存储在ProductInfo表中。
为了检测更改,我在ProductInfoController中定义了ProductInfoController,以确保如果在XML数据解析期间更改了ProductInfo,则更改ProductInfo的updated_at列。
为了更新值,我使用find_or_initialize_by捕获任何现有记录,然后调用update,将来自数据源的所有属性传入。如果没有任何属性更改记录的updated_at列,那么ProductInfo表中的记录将不会被更改,但是Product表中的记录仍然会被更改。
product = Product.find_or_initialize_by(guid: xml.guid)
product.update(category: xml.category)
product_info = ProductInfo.find_or_initialize_by(product_id: product.id, locale: xml.locale)
product_info.update(name: xml.name, price: xml.price)因此,问题是,每当调用模型上的保存时,都会调用触摸,这发生在更新调用中。我是否可以使用另一种调用,或者更好地设置这些属性?或者,是否有更好的方法来增量地更新属性?
发布于 2014-09-08 15:22:00
我没有使用.update(),而是将代码更改为使用.update_attributes,这允许我检查对象是否使用.has_changed?进行了更改,这是由@ic廓建议的。然后,在使用.save提交更改之前,我可以执行适当的操作。
https://stackoverflow.com/questions/25345316
复制相似问题