ruby 通过rails中的db触发器修改updated_at属性

qxgroojn  于 2022-11-04  发布在  Ruby
关注(0)|答案(2)|浏览(135)

我想知道通过数据库触发器更新记录的updated_at属性在片段缓存方面是否有什么错误(即,部分内容不会被重新缓存/旧的缓存键不会从内存中消失)。

  • 附加信息 * 我使用触发器是因为使用upsert gem,它不会修改updated_at属性,除非明确告诉我这样做(我不想这样做);同样,由于相同的gem,我不能在模型上使用active::record after_保存或before_save。

请让我知道,如果有任何其他信息,我应该提供一些澄清我的问题。

h79rfbju

h79rfbju1#

这并没有什么错,但是如果你需要这样做,你可以简单地在一个方法中使用record.touch,这样你的代码会更干净,应用程序也会更容易维护。

70gysomp

70gysomp2#

另一种实现方法是使用Rails upsert_all方法的on_duplicate属性(不使用任何gem)。

YourModel.upsert_all(
  array_of_data,
  unique_by: %i[field_1 field_2],
  on_duplicate: Arel.sql('updated_at = current_timestamp')
)

如果您有其他字段需要更新,请不要忘记将它们添加到Arel.sql中:

on_duplicate: Arel.sql('updated_at = current_timestamp, field_to_update = excluded.field_to_update')

相关问题