我有2個Rails模型:Book and Category,其中一本書belongs_to
一個類別,一個類別has_many
書籍。在Rails中缺少觸摸選項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
,這是相當可怕的。 有沒有更好的方法?
你說得對:1)當類別改變時,我確實需要更改所有書籍; 2)update_all更直接,不實例化模型;直接發送到DB的SQL查詢可避免性能問題。 – Giuseppe
但這會觸發緩存更新? – user1262904