当我执行update_all()时,轮胎(elasticsearch)没有更新

时间:2012-01-10 02:50:43

标签: ruby-on-rails elasticsearch tire

我在轨道上使用红宝石中的Tire来连接ElastiSearch。

当我使用update_attributes修改元素的参数时,Tire会自动更新索引以反映此更改。

但是,当我通过执行update_all同时修改多个元素时,Tire不会更新索引,并且它与我的数据库不同步。

这是轮胎中的错误吗?有解决方法吗?

1 个答案:

答案 0 :(得分:2)

根据ActiveRecord#update_all documentation

  

如果所有记录与提供的一组条件匹配,则更新所有记录,也可以提供限制和订单。此方法构造单个SQL UPDATE语句并将其直接发送到数据库。它不会实例化所涉及的模型,也不会触发Active Record回调。

所以 Tire 不会更新任何内容,因为回调没有被调用...

您必须:

a)使用find_each并调用save方法

b)使用update_all,然后执行完整的重新索引。