如何在for循环

时间:2017-04-29 09:46:01

标签: ruby model update-attributes

我有以下代码可以使用finde

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

为什么没有找到课程?为什么它没有在twt中正确设置?

1 个答案:

答案 0 :(得分:2)

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

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查询中完成所有这些工作。