更新另一个字段以及 rails 中的 increment_counter 方法

Posted

技术标签:

【中文标题】更新另一个字段以及 rails 中的 increment_counter 方法【英文标题】:Update an another field along with the increment_counter method in rails 【发布时间】:2021-04-12 20:51:04 【问题描述】:

我的 Customer 模型上有一个 cache_counter 字段,即 orders_count。该字段只能使用 increment_counter 方法更新。 Customer.increment_counter(:orders_count, customer_id) 这将增加客户的订单数。我的 Customer 模型中已经有另一个字段 last_updated_at ,我想沿着 increment_counter 方法更新这个字段。 这怎么可能?

【问题讨论】:

【参考方案1】:

如果您只需要在last_updated_at 中设置tiemstamp,您可以使用belongs_to 关联中的touch 选项为您的订单。类似的,

class Order < ApplicationRecord
  belongs_to :customer, touch: :last_updated_at
end

您可以阅读更多关于它的信息here

【讨论】:

【参考方案2】:

increment_counter 方法接受第三个可选参数,允许更新时间戳列。因此,您只需将方法调用更改为:

Customer.increment_counter(:orders_count, customer_id, touch: :last_updated_at)

【讨论】:

在 :last_updated_at 中分配的值是多少,因为我需要 Time.now() 作为值。 它将在我们的应用程序用于created_atupdated_at 列的同一时区分配Time.now,通常是UTC

以上是关于更新另一个字段以及 rails 中的 increment_counter 方法的主要内容,如果未能解决你的问题,请参考以下文章

如果 Rails 表单中的另一个字段为空,则验证嵌套字段

Rails3:将一个数据库中的字段包含到另一个模型中

Rails 5 调度程序每天更新一次数据库

在 Rails 中将模型更新为另一个模型

嵌套 Rails 表单中的动态值未更新

如何在Rails中正确使用控制器助手模块,以及如何在这些助手之间建立连接?