ruby-on-rails – Rails has_many关系中缺少触摸选项
发布时间:2020-12-16 23:27:30 所属栏目:百科 来源:网络整理
导读:我有2个Rails模型:Book和Category,其中一本书属于一个类别,一个类别has_many书籍. 类别名称显示在每本书的页面中,并且页面被缓存. 如果我更改了类别名称(例如,从“科幻”到“科幻小说”),那么所有相应的书页都将过时,并且需要“触摸”书籍才能触发HTML重新
我有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 这太可怕了. 解决方法
你不能使用touch on has_many关联,它只适用于belongs_to,这是事实.
如果我正确理解了您想要的内容,那么Book模型中的touch:true的答案将无效,因为当您更改Category模型并且视图不会重新生成时,Book对象将不会更新. 所以我认为你的解决方案是最好的. (你也可以使用books.update_all(updated_at:Time.now)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 4种XML写入的对比
- 10行代码实现coffeescript全自动编译成js(linux/
- ruby – Vpim :: Vcard – 解析vcard 2.1
- RDBMS and listener log (xml) from SQL*Plus wi
- 除非另外还指定了 TOP 或 FOR XML,否则,ORDER
- 问题:Flex4的手机项目里面不支持VideoDisplay组
- iphone – 处理块,完成处理程序,dispatch_async和
- c# – UrlRewriter HttpModule会话问题
- 倒置单项链表接口实现
- ruby-on-rails – field_for和嵌套形式与mongoid
热点阅读