我正在尝试检查params[:search][:city]
是否存在,但这就是我得到的:
do_magic if params[:search].try(:city) # undefined method `city' for {"city"=>["3"]}:ActiveSupport::HashWithIndifferentAccess
如果密钥存在,则会显示此错误,但是当密钥不存在时,它会出错。
请注意,:search
和:city
可能根本不存在于params哈希中。
有什么想法吗?
答案 0 :(得分:4)
try
正在尝试使用给定名称调用方法。您需要一个带有参数的[]
方法。
do_magic if params[:search].try(:[], :city)
答案 1 :(得分:0)
:params[:search]
为String
时,塞尔吉奥的解决方案不考虑情况。如果是这样,ruby会产生错误:
can't convert Symbol into Integer
因此,涵盖所有案例的正确解决方案是检查params[:search]
是Hash
,然后检查:city
密钥。
do_magic if params[:search].is_a?(Hash) && params[:search][:city]