我有以下代码可以使用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中正确设置?
答案 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查询中完成所有这些工作。