我有2个Rails模型:Book和Category,其中一本书属于一个类别,一个类别has_many书籍.
如果我更改了类别名称(例如,从“科幻”到“科幻小说”),那么所有相应的书页都将过时,并且需要“触摸”书籍才能触发HTML重新生成.
能够这样做似乎是有意义的:
class Category << ActiveRecord::Base has_many :books,touch: true end
但是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
这太可怕了.
有没有更好的办法?