在Rails 4中,我想设置一个等于ActiveRecord对象的变量,但前提是它存在。例如,我想将实例变量@admin
设置为与我通过params传入的给定密码相同的admin。这就是我现在这样做的方式:
if Admin.find_by_email(params[:email])
@admin = Admin.find_by_email(params[:email])
end
我需要检查是否存在带有电子邮件'params[:email]'
的管理员,以处理传入无效电子邮件的边缘情况。但是,这种方法要求我执行2次数据库请求。我宁愿只做一个并完成同样的事情。有什么建议吗?
答案 0 :(得分:3)
只需删除if语句即可。像find_by_email这样的动态查找器如果找不到任何内容,将返回nil。
然后当代码依赖于管理员存在时
unless @admin.blank?
#do stuff
end
答案 1 :(得分:1)
您可以这样做:
@admin = Admin.find_by_email(params[:email])
如果没有找到管理员,@ admin将等于nil
或使用临时变量:
admin_tmp = Admin.find_by_email(params[:email])
@admin = admin_tmp if admin_tmp.present?