2015-09-10 52 views

回答

2

隱含的假設是你熟悉ActiveRecord,他們假設你假設Mongoid的行爲像ActiveRecord(除非它不能)。在ActiveRecord的,update_all is explicitly documented不調用回調:

update_all(updates)

[...] This method constructs a single SQL UPDATE statement and sends it straight to the database. It does not instantiate the involved models and it does not trigger Active Record callbacks or validations. [...]

Mongoid的update_all一個update操作同樣送入MongoDB中,而不調用回調。

Mongoid文檔(像往常一樣在Ruby中)在重要細節上有點薄,所以你必須習慣於猜測和閱讀你正在使用的庫的來源。包括測試以驗證您的猜測也是避免升級過程中不愉快的一個好主意。

+0

> c.update_all(resources)throws:NoMethodError:未定義的方法'update_all' - 是否有現代等價物? –

+0

@RomanGaufman [Mongoid docs](https://docs.mongodb.com/mongoid/6.1/api/Mongoid/Contextual/Mongo.html#update_all-instance_method)建議'update_all'應該可以工作。具體是什麼'c'?哪個版本的Mongoid? –