好吧,我有一个这样的参数哈希:
params = { :q => { :id_eq => "" } }
测试是否id_eq为空白的最佳方法是什么?我目前正在使用if params[:q] && params[:q][:id_eq].blank?,但似乎有很多重复的代码。
有没有更好的办法?
好吧,我有一个这样的参数哈希:
params = { :q => { :id_eq => "" } }
测试是否id_eq为空白的最佳方法是什么?我目前正在使用if params[:q] && params[:q][:id_eq].blank?,但似乎有很多重复的代码。
有没有更好的办法?
没有比你已经在做的更好的方法了。(至少在我看来。)依赖异常是一个坏主意,其他任何东西都明显不那么清晰。
if params.fetch(:q, {id_eq: true})[:id_eq].blank?
params = { :q => { :id_eq => "" } }
params[:q] && params[:q][:id_eq].blank? # => true (OP)
params.fetch(:q, {id_eq: true})[:id_eq].blank? # => true (my code)
params[:q].try(:[], :id_eq).blank? # => true (Marek Lipka)
params.try(:values_at, :q).first[:id_eq].blank? # => true (mbratch old)
params[:q][:id_eq].blank? rescue false # => true (Doydle)
params.fetch(:q,{})[:id_eq].blank? # => true (Stefan)
params.try(:[], :q).try(:[], :id_eq).blank? # => true (mbratch new)
params = { :q => { :id_eq => "foo" } }
params[:q] && params[:q][:id_eq].blank? # => false
params.fetch(:q, {id_eq: true})[:id_eq].blank? # => false
params[:q].try(:[], :id_eq).blank? # => false
params.try(:values_at, :q).first[:id_eq].blank? # => false
params[:q][:id_eq].blank? rescue false # => false
params.fetch(:q,{})[:id_eq].blank? # => false
params.try(:[], :q).try(:[], :id_eq).blank? # => false
params = {}
params[:q] && params[:q][:id_eq].blank? # => nil (falesy value)
params.fetch(:q, {id_eq: true})[:id_eq].blank? # => false (falesy value)
params[:q].try(:[], :id_eq).blank? # => true # Wrong
params.try(:values_at, :q).first[:id_eq].blank? # => true # Wrong
params[:q][:id_eq].blank? rescue false # => true # Wrong
params.fetch(:q,{})[:id_eq].blank? # => true # Wrong
params.try(:[], :q).try(:[], :id_eq).blank? # => true # Wrong
nil出于条件的目的,和之间的区别false并不重要,但得到true而不是nil肯定是错误的。
rescue始终是一种选择:
if (params[:q][:id_eq].blank? rescue false)