最佳实践如果在rails中找到nil类,则抛出错误

时间:2017-08-31 04:06:55

标签: ruby-on-rails ruby

当我的查询返回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来捕获错误?

或者有任何其他方法可以使代码更好。

2 个答案:

答案 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