gpt4 book ai didi

ruby-on-rails - Rails has_many 关系中缺少触摸选项

转载 作者:行者123 更新时间:2023-12-03 09:24:32 25 4
gpt4 key购买 nike

我有 2 个 Rails 模型:Book 和 Category,其中有一本书 belongs_to一个类别,一个类别has_many图书。

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

如果我更改类别名称(例如,从“科幻”更改为“科幻”),那么所有相应的书页都将陈旧,并且需要“触摸”书籍以触发 HTML 重新生成。

能够做到这一点似乎很有意义:

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

但是 the option is unavailable ,我猜是因为 touch机制将实例化每个对象,这可能会导致 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

这是非常可怕的。
有没有更好的办法?

最佳答案

您不能使用 touchhas_many关联,它仅适用于 belongs_to , 这是事实。

如果我正确理解你想要什么,答案是 touch:true在 Book 模型中将不起作用,因为当您更改 Category 模型时 Book 对象不会更新,并且 View 不会重新生成。

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

关于ruby-on-rails - Rails has_many 关系中缺少触摸选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33409261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com