3

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

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

如果密钥存在,则会显示此错误,但当密钥不存在时,它会出人意料地工作。

请记住,params 哈希中可能根本不存在这:search两者:city

有任何想法吗?

4

2 回答 2

4

try正在尝试调用具有给定名称的方法。您需要一个[]带有参数的方法。

do_magic if params[:search].try(:[], :city)
于 2012-08-20T09:46:36.507 回答
0

塞尔吉奥的解决方案不考虑情况,什么时候:params[:search]String. 如果是这样,ruby 会产生错误:

can't convert Symbol into Integer

因此,涵盖所有情况的正确解决方案是检查params[:search]是 aHash然后检查:city密钥。

do_magic if params[:search].is_a?(Hash) && params[:search][:city]
于 2013-08-05T10:00:40.813 回答