Ruby on rails 更新\u全部清除变量中的我的数组
我在Rails的小型服务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变量为空。如何清除阵
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