2010-06-30 50 views
0

我創建使用此聲明數組update_all ..問題關於Ruby的

users_who_promoted = @organization.card_signups.select {|c| c.credit_status == true } 

,但是當我這樣做:

users_who_promoted.update_all("credit_status = false") 

我得到一個很大的錯誤:

NoMethodError: undefined method `update_all' for #<Array:0x32377bc> 
from (irb):25 

爲什麼是這樣?

回答

1

啊哈!這似乎工作..

unless @organization.card_signups.empty? 
    @organization.card_signups.update_all("credit_status = false") 
end 
+0

有趣......這似乎並不在我的版本的Rails(2.1.2)的工作,但我想這就是我得到了生活在石器時代。 – bnaul 2010-06-30 20:55:29

+0

這是2.3.5 ..但是它基本上是你在直接使用這種方法時所建議的方法,這種方式與組織模型有關。 – Trip 2010-07-01 02:35:16

1

當你實際上是一個靜態方法時,你正在對一個ActiveRecord實例數組調用update_all。

你的調用應該改爲User.update_all(或CardSignup,或者你的類被調用),然後是更新,然後是條件。

參見:http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001787

EDIT缺乏清楚的:具有值的數組是隻有幫助,因爲它可以讓你構造一個條件傳遞到update_all,IN(#形式「ID的{users_who_promoted。 map {| u | u.id} .join(「,」)})「。如果您不認爲這會成爲應用程序性能的瓶頸,那麼更新和保存每個模型對象可能會更具可讀性。