关于Ruby中update_all的问题

时间:2010-06-30 20:44:47

标签: ruby-on-rails

我使用这个语句创建了一个数组..

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

为什么会这样?

2 个答案:

答案 0 :(得分:1)

当你在ActiveRecord实例数组中调用update_all时,它实际上是一个静态方法。

你的电话应该是User.update_all(或者CardSignup,或者你的类叫什么),然后是更新,然后是条件。

请参阅:http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001787

编辑缺乏明确性:拥有该值数组只是有用的,因为它允许您构造一个条件以传入update_all,形式为“id IN”(#{users_who_promoted.map {| u | u.id }。加入(”,”)})”。如果您认为这不会成为应用程序性能的瓶颈,那么简单地更新和保存每个模型对象可能更具可读性。

答案 1 :(得分:1)

啊哈!这似乎有用..

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