1

我在 ruby​​ on rails 中使用 Tire 来连接 ElastiSearch。

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

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

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

4

1 回答 1

2

根据ActiveRecord#update_all 文档

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

所以轮胎不会更新任何东西,因为没有调用回调......

您必须:

a) 使用find_each和调用save方法

b)使用update_all,但随后进行完整的重新索引。

于 2012-01-10T09:22:22.853 回答