如何在 for 循环中更新模型属性的值

How to update value of a Model's attribute in a for loop

我有以下有效的代码

twt = Tweet.where(user_id: @user.uid).where(status_id: 0).order(:created_at, :id).first
            twt.status_id = 1
            twt.save

我想为数据库中的每个可用用户制作此代码运行:

@user = User.all
            @user.each do |u|
            twt = Tweet.where(user_id: u.uid).where(status_id: 0).order(:created_at, :id).first
            twt.status_id = 1
            twt.save
            end

然而,这给了我错误:

undefined method `status_id=' for nil:NilClass

为什么找不到 class?为什么在 twt 中设置不正确?

简单来说,对于某些用户来说,这一行

twt = Tweet.where(user_id: u.uid).where(status_id: 0).order(:created_at, :id).first

没有找到结果。您可以添加

if twt
  twt.status_id = 1
  twt.save
end

无论如何,您可以将其重写为

Tweet.find_by(user_id: u.uid, status_id: 0).order(:created_at, :id)

显然,只需一个 SQL 查询即可完成所有这些工作。