在Rails3中,除了更新的記錄數(這可能取決於您的DBMS是否返回該信息),update_all不會返回任何有意義的信息。
http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000343
它不會實例任何對象,你可以通過查看日誌驗證這一點。
如果我有我的數據庫(再沒有別的),4和5的用戶ID,這裏就是我得到:
irb(main):007:0> u = User.update_all("id = id", :id => 5)
=> 1
irb(main):008:0> u = User.update_all("id = id", :id => 55)
=> 0
irb(main):009:0> u = User.update_all("id = id", :id => [4,5])
=> 2
irb(main):010:0> u = User.update_all("id = id", :id => [4,53])
=> 1
irb(main):011:0> u.class
=> Fixnum
如果你想獲得被修改的記錄,你必須使用「更新「,傳遞一個ID值列表,然後你會收到實例化的對象。
請注意,如果您擁有大量ID,則可以通過實例化太多對象輕易地淹沒服務器的內存。
我能想到的另一種方法是首先對將要升級的對象進行查詢(使用對象分組並僅從需要顯示的表中選擇屬性,從而節省內存),生成你的報告,然後運行Update_All查詢...
你能提供一個例子嗎? – Martin 2011-02-17 02:05:22