好吧,我有一个这样的参数哈希:
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)