3

私はparams[:search][:city]存在するかどうかを確認しようとしていますが、これは私が得るものです:

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

このエラーは、キーが存在する場合に表示されますが、キーが存在しない場合は驚くほど機能します。

:searchとは両方とも:cityparamsハッシュにまったく存在しない可能性があることに注意してください。

何か案は?

4

2 に答える 2

4

try指定された名前でメソッドを呼び出そうとしています。[]パラメータ付きのメソッドが必要です。

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

Sergioの: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 に答える