当我的查询返回nil
时,最佳做法是什么。
@resume = Resume.where(id: params[:id], interaction_id: params[:interaction_id]).first
@resume.update(resume_url: params[:resume_url])
如果我的查询返回nil,则会抛出undefined method 'update' for nil:NilClass
错误。
我应该在更新前使用if else
语句检查@resume
,还是使用begin rescue
来捕获错误?
或者有任何其他方法可以使代码更好。
答案 0 :(得分:1)
@resume = Resume.where(id: params[:id], interaction_id: params[:interaction_id]).first
if @resume
@resume.update(resume_url: params[:resume_url])
else
flash[:error] = "Resume not found with id #{params[:id]}"
end
答案 1 :(得分:-1)
在返回的数据集上盲目地调用first
通常会产生代码气味。
有两种正确的解决方法:
如果您希望返回任意数量的记录:
(@resumes = Resume.where(...)).each do |resume|
resume.update(resume_url: params[:resume_url])
end
如果您确定您应该收到一条记录或没有记录:
@resumes = Resume.where(...)
case @resumes.size
when 0 then # flash or something reporting
when 1
(@resume = @resumes.first).update(resume_url: params[:resume_url])
else # flash or something reporting
end