我在轨道上使用红宝石中的Tire来连接ElastiSearch。
当我使用update_attributes
修改元素的参数时,Tire会自动更新索引以反映此更改。
但是,当我通过执行update_all
同时修改多个元素时,Tire不会更新索引,并且它与我的数据库不同步。
这是轮胎中的错误吗?有解决方法吗?
答案 0 :(得分:2)
根据ActiveRecord#update_all documentation:
如果所有记录与提供的一组条件匹配,则更新所有记录,也可以提供限制和订单。此方法构造单个SQL UPDATE语句并将其直接发送到数据库。它不会实例化所涉及的模型,也不会触发Active Record回调。
所以 Tire 不会更新任何内容,因为回调没有被调用...
您必须:
a)使用find_each
并调用save
方法
b)使用update_all
,然后执行完整的重新索引。