2012-01-10 29 views
1

我在rails上使用ruby來連接ElastiSearch。當我做update_all時,tyre(elasticsearch)沒有更新()

當我使用update_attributes修改元素參數時,輪胎會自動更新索引以反映此更改。

但是,當我通過做update_all來同時修改多個元素時,Tire不更新索引,並且它與我的數據庫不同步。

這是Tyre中的錯誤嗎?有沒有解決方法?

+0

你是否在github上爲Tire提交了一個問題? Karmi在回答問題和集思廣益尋找可能的解決方案方面非常出色。 – 2012-01-10 04:53:05

回答

2

ActiveRecord#update_all documentation

更新與給定的細節全部記錄它們是否匹配提供的一組條件,限制和訂單也可提供。該方法構造一個單獨的SQL UPDATE語句並將其直接發送到數據庫。它不會實例化相關模型,也不會觸發Active Record回調。

所以輪胎不更新任何東西,因爲回調不叫......

您必須要麼:

一)使用find_each,並調用save方法

b)使用update_all,但然後做一個完整的重新索引。

+1

我喜歡(a),因爲它看起來像你想要的功能涉及更新Rails對象,而不是直接的SQL UPDATE調用。除了重新編制索引之外,還可能有其他對象發生在對象上。 – 2012-04-13 14:39:47

相關問題