Ruby on rails 在导轨中';ActiveRecord,触摸的作用是什么?

Ruby on rails 在导轨中';ActiveRecord,触摸的作用是什么?,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我听说Rails的ActiveRecord/ActiveModel有一个叫做“touch”的东西。但是,我还没有找到任何描述此功能用途的内容 它做什么,有什么用?根据,它是一种仅用当前时间更新模型的指定时间戳的方法。因此,要在字段更新updated_,请执行以下操作: product.touch 或更新位于的updated_和位于的designed_字段: product.touch(:designed_at) 现在,我以前从未使用过这种方法,但我认为在不实际更改内容的情况下,将问题(如堆

我听说Rails的ActiveRecord/ActiveModel有一个叫做“touch”的东西。但是,我还没有找到任何描述此功能用途的内容

它做什么,有什么用?

根据,它是一种仅用当前时间更新模型的指定时间戳的方法。因此,要在字段更新
updated_,请执行以下操作:

product.touch
或更新位于
updated_和位于
designed_字段:

product.touch(:designed_at) 

现在,我以前从未使用过这种方法,但我认为在不实际更改内容的情况下,将问题(如堆栈溢出)“碰撞”到搜索查询的顶部会很有用。

除了Ryan的答案之外,别忘了在您的模型中使用touch,如下所示:

class Book < ActiveRecord::Base
  belongs_to :library, touch: true
end
classbook

现在,当您将一本书添加到库中时,库的
更新时间将反映添加最新书籍的时间!奖金

如果您正在使用flux(Alt/Redux)之类的前端框架或对服务器进行异步调用来更新您的模型,这将非常有用。在对服务器进行多个API调用的情况下,我使用它在进行任何保存或验证之前,首先检查模型的“updated_at”时间。接下来,您可以使用“touch”相应地更新“updated_at”字段。

在rails中,touch用于更新持久化对象的
updated_at
字段。 但是如果我们将其他属性作为参数传递,它也会随着
updated\u at
更新这些字段。即使作为参数传递,它也会更新非日期时间字段

比如说

product.touch(:price) #price is an integer

将在产品的
更新
,并将价格值设置为时间

俄罗斯玩偶缓存的优点是,如果更新了单个产品,则在重新生成外部片段时,可以重用所有其他内部片段

如果[内部片段]的任何属性发生更改,处的
updated_值将设置为当前时间,从而使缓存过期。但是,由于[parent]对象的
updated_at
不会更改,因此该缓存不会过期,您的应用程序将提供过时数据。为了解决这个问题,我们使用触摸法将模型连接在一起

现在在Rails 6中实现了一种新方法,称为touch\u all

这样您就可以更新集合组的时间戳

示例:如果您想用所有产品的当前时间更新更新的时间戳,那么您可以使用如下方法

Product.touch_all


只是用来“编辑”一个模型,让你知道它最后一次在相关上下文中使用的时间。例如,在登录时更新用户,以便您知道他们上次来的时间。我相信他们是从命令行实用程序中获取名称的,该实用程序更新文件的“在元数据处修改”字段。请注意,根据上面的文档,虽然touch确实更改了它所使用的对象的数据库行,但它不会触发大多数正常的Rails回调。唯一触发的回调是触摸后的
,\u提交后的
,\u回滚后的
<触摸模型后,不会执行验证前的
、保存后的
等,因此,如果使用触摸,请确保不需要其中的任何逻辑。