Ruby on rails 检查Rails中是否存在对象并将其设置为等于的有效方法

Ruby on rails 检查Rails中是否存在对象并将其设置为等于的有效方法,ruby-on-rails,ruby,ruby-on-rails-4,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]”检查是否存在管理员,以处理传入无效电子邮件的边缘情况。但是,这种方法需要

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

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

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

删除if语句即可。像find_by_email这样的动态查找者如果没有找到任何东西,将返回零

然后,当代码依赖于管理员时,存在

unless @admin.blank?
  #do stuff
end

只需删除if语句。像find_by_email这样的动态查找者如果没有找到任何东西,将返回零

然后,当代码依赖于管理员时,存在

unless @admin.blank?
  #do stuff
end
您可以简单地执行以下操作:

@admin = Admin.find_by_email(params[:email])
如果找不到管理员,@admin将等于nil

或使用临时变量:

admin_tmp = Admin.find_by_email(params[:email])
@admin    = admin_tmp if admin_tmp.present?
您可以简单地执行以下操作:

@admin = Admin.find_by_email(params[:email])
如果找不到管理员,@admin将等于nil

或使用临时变量:

admin_tmp = Admin.find_by_email(params[:email])
@admin    = admin_tmp if admin_tmp.present?

可以我想我已经试过了,但还是出错了。我可能只是事后没有做if@admin检查。谢谢可以我想我已经试过了,但还是出错了。我可能只是事后没有做if@admin检查。谢谢