我想知道通过数据库触发器更新记录的updated_at属性在片段缓存方面是否有什么错误(即,部分内容不会被重新缓存/旧的缓存键不会从内存中消失)。
请让我知道,如果有任何其他信息,我应该提供一些澄清我的问题。
h79rfbju1#
这并没有什么错,但是如果你需要这样做,你可以简单地在一个方法中使用record.touch,这样你的代码会更干净,应用程序也会更容易维护。
record.touch
70gysomp2#
另一种实现方法是使用Rails upsert_all方法的on_duplicate属性(不使用任何gem)。
upsert_all
on_duplicate
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')
2条答案
按热度按时间h79rfbju1#
这并没有什么错,但是如果你需要这样做,你可以简单地在一个方法中使用
record.touch
,这样你的代码会更干净,应用程序也会更容易维护。70gysomp2#
另一种实现方法是使用Rails
upsert_all
方法的on_duplicate
属性(不使用任何gem)。如果您有其他字段需要更新,请不要忘记将它们添加到Arel.sql中: