检查对象是否存在的有效方法,并在Rails中设置相等

时间:2014-03-27 13:32:00

标签: ruby-on-rails ruby ruby-on-rails-4

在Rails 4中,我想设置一个等于ActiveRecord对象的变量,但前提是它存在。例如,我想将实例变量@admin设置为与我通过params传入的给定密码相同的admin。这就是我现在这样做的方式:

if Admin.find_by_email(params[:email])
   @admin = Admin.find_by_email(params[:email])
end

我需要检查是否存在带有电子邮件'params[:email]'的管理员,以处理传入无效电子邮件的边缘情况。但是,这种方法要求我执行2次数据库请求。我宁愿只做一个并完成同样的事情。有什么建议吗?

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?