Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – Rails has_many关系中缺少触摸选项大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有2个Rails模型:Book和Category,其中一本书属于一个类别,一个类别has_many书籍.

类别名称显示在每本书的页面中,并且页面被缓存.

如果我更改了类别名称(例如,从“科幻”到“科幻小说”),那么所有相应的书页都将过时,并且需要“触摸”书籍才能触发HTML重新生成.

能够这样做似乎是有意义的:

class Category << ActiveRecord::Base
  has_many :books,touch: true
end@H_489_9@ 
 

但是the option is unavailable,我猜是因为触摸机制会实例化每个对象,这可能会导致has_many关系出现重大性能损失.

为了避免这种情况,我使用原始SQL如下:

class Category << ActiveRecord::Base
  has_many :books
  after_update -> {
    ActiveRecord::Base.connection.execute "updatE books SET updated_at='#{Current_time_String}' WHERE category_id=#{iD})"
  }
end@H_489_9@ 
 

这太可怕了.
有没有更好的办法?

解决方法

你不能使用touch on has_many关联,它只适用于belongs_to,这是事实.

如果我正确理解了您想要的内容,那么Book模型中的touch:true的答案将无效,因为当您更改Category模型并且视图不会重新生成时,Book对象将不会更新.

所以我认为你的解决方案是最好的. (你也可以使用books.update_all(updated_at:Time.now))

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – Rails has_many关系中缺少触摸选项全部内容,希望文章能够帮你解决ruby-on-rails – Rails has_many关系中缺少触摸选项所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。