2010-06-30 135 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(“,”)})“。如果您不认为这会成为应用程序性能的瓶颈,那么更新和保存每个模型对象可能会更具可读性。