gpt4 book ai didi

ruby-on-rails - update_all 清除变量中的数组

转载 作者:数据小太阳 更新时间:2023-10-29 08:36:31 26 4
gpt4 key购买 nike

我在 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_all 时,users 变量是正确的,但是当我使用 update_all 时,我的 users变量为空。我怎样才能停止清除我的阵列?我需要从 db 返回所有用户,这些用户在 update_all

之前处于非事件状态

最佳答案

来自docs :

Updates all records in the current relation with details given. This method constructs a single SQL UPDATE statement and sends it straight to the database. It does not instantiate the involved models and it does not trigger Active Record callbacks or validations. Values passed to update_all will not go through ActiveRecord's type-casting behavior. It should receive only values that can be passed as-is to the SQL database.

正如我强调的那样:update_all 不会加载和实例化关系中的对象。这意味着 users 变量只包含一个关系对象,但没有查询数据库以获取匹配记录。该关系第一次尝试加载记录是在 users.to_a 中。但在那个时间点,记录已经被更改(激活)。

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

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

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

users
end

关于ruby-on-rails - update_all 清除变量中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34811646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com