检查params [:x] [:y]是否存在的最短方法

时间:2012-08-20 09:45:17

标签: ruby ruby-on-rails-3

我正在尝试检查params[:search][:city]是否存在,但这就是我得到的:

do_magic if params[:search].try(:city) # undefined method `city' for {"city"=>["3"]}:ActiveSupport::HashWithIndifferentAccess

如果密钥存在,则会显示此错误,但是当密钥不存在时,它会出错。

请注意,:search:city可能根本不存在于params哈希中。

有什么想法吗?

2 个答案:

答案 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]