2011-02-16 65 views
5

鑑於這種代碼如何驗證是否update_all在Rails的

def create 
    @upgrades = User.update_all(["role = ?","upgraded"], :id => params[:upgrade]) 
    redirect_to admin_upgrades_path, :notice => "Successfully upgraded user."  
end 

我怎樣才能真正在行動驗證他們是否被保存或者不重定向到相應的頁面和信息實際更新?

回答

7

在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查詢...

+0

你能提供一個例子嗎? – Martin 2011-02-17 02:05:22