2 Rails modelim var: Kitap ve Kategori, bir kitabın belongs_to
bir kategorisi, bir kategori has_many
kitap.Rails has_many ilişkisinde eksik dokunma seçeneği
Kategori adı her kitabın sayfasında gösterilir ve sayfalar önbelleğe alınır.
Bir kategori adını değiştirirseniz ('Sci Fi'den' Bilim Kurgu'ya 'diyelim), ilgili tüm kitap sayfaları eski olacak ve HTML yenilemeyi tetiklemek için kitapların "dokunulması" gerekir.
anlamda yapabilmek için yapmak gibi görünüyor: touch
mekanizması has_many
ilişkiler için önemli bir performans isabet neden olabilir her nesneyi, örneğini çünkü
class Category << ActiveRecord::Base
has_many :books, touch: true
end
Ama the option is unavailable sanırım.
şöyle çiğ SQL kullanıyorum, o önlemek için: oldukça korkunç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
. Daha iyi bir yolu var mı?
Her iki konuda da haklısınız: 1) Bir kategori değiştiğinde tüm kitapları değiştirmem gerekiyor; 2) update_all daha basittir ve modelleri başlatmaz; Doğrudan DB'ye gönderilen SQL sorgusu, performans sorunlarını önler. – Giuseppe
ama bu bir önbellek güncellemesini tetikleyecek mi? – user1262904