【问题标题】:Updating multiple model attributes incrementally增量更新多个模型属性
【发布时间】:2014-09-08 23:22:00
【问题描述】:

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

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

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

为了检测更改,我在 ProductInfoController 中定义了 touch: true,以确保在 XML 数据解析期间更改 ProductInfo 时更改 Productupdated_at 列。

为了更新值,我使用find_or_initialize_by 捕获任何现有记录,然后调用update,从XML 数据源中传入所有 属性。如果没有任何属性更改,则记录的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)

所以问题是,每当在模型上调用 save 时都会调用 touch,这发生在 update 调用中。是否有我可以使用的替代调用,或者设置这些属性的更好方法?或者,有没有更好的方法来增量更新属性?

【问题讨论】:

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


【解决方案1】:

我已将代码更改为使用.update_attributes,而不是使用.update(),这使我可以按照@icicle 的建议使用.has_changed? 检查对象是否已更改。然后,我可以在使用 .save 提交更改之前执行适当的操作。

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2017-04-13
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    相关资源
    最近更新 更多