Ruby on rails 更新\u全部清除变量中的我的数组

Ruby on rails 更新\u全部清除变量中的我的数组,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我在Rails的小型服务 class ReadUserService def self.read_users(count) users = Users.inactive.limit(count) users.update_all(status: User.statuses[:active]) users.to_a end end 当我不调用update\u all时,users变量正确,但当我使用update\u all时,我的users变量为空。如何清除阵

我在Rails的小型服务

class ReadUserService
  def self.read_users(count)
    users = Users.inactive.limit(count)

    users.update_all(status: User.statuses[:active])

    users.to_a
  end
end
当我不调用
update\u all
时,
users
变量正确,但当我使用
update\u all
时,我的
users
变量为空。如何清除阵列?我需要从数据库返回所有用户,这些用户在更新之前处于非活动状态

使用给定的详细信息更新当前关系中的所有记录。此方法构造一个
sqlupdate
语句,并将其直接发送到数据库。它不会实例化所涉及的模型,也不会触发活动记录回调或验证。传递给
update\u all
的值不会通过ActiveRecord的类型转换行为。它应该只接收可以按原样传递给SQL数据库的值

正如我强调的:
update\u all
不会加载一个实例来实例化关系中的对象。这意味着
users
变量只保存一个关系对象,但没有查询数据库中的匹配记录。关系首次尝试加载记录是在
users.to\u a
中。但此时该记录已被更改(激活)

要解决此问题,请先加载记录,然后更新:

def self.read_users(count)
  scope = Users.inactive.limit(count)
  users = scope.to_a

  scope.update_all(status: User.statuses[:active])

  users
end

@spickermann
的答案是正确的

但是,为了使其更简单,它看起来像是一个类方法(即调用该类),这表明您应该在初始化该类时调用它(而不是之后,作为实例方法):


如果您想让它更具说服力,请使用
@spickermann
的建议。

我认为
update\u all
返回记录更新次数的计数。尝试将此
users.update\u all(status:User.statuses[:active])
替换为
users.inactive.limit(count).update\u all(status:User.statuses[:active])
我希望这会work@WandMaker:否,
update\u all
是一个方法,但
users
是一个数组。感谢您的澄清。
class ReadUserService
  def self.read_users(count)
     User.inactive.limit(count).update_all(status: User.statuses[:active]) #-> this will be returned by default
  end
end