我有一个可选的URL参数,比如我需要检查的“user_id”。我知道我可以使用
if params.has_key?(:user_id) ...
根据user_id
参数的存在来执行操作,但有时会在没有值的情况下传递user_id
,所以我想完全忽略它。为了解决这个问题,我发现自己做了很多 - 但必须有更好的方法,对吗?
if params[:user_id] && !params[:user_id].empty?
# Do stuff
end
看起来真的很难看。
答案 0 :(得分:17)
如果您只是检查是否存在params[:user_id]
,那么您可以尝试:
if params[:user_id].present?
# do stuff
end
答案 1 :(得分:1)
如何使用Hash#fetch
?
if params.fetch(:user_id, nil).present?
# Do stuff
end
答案 2 :(得分:0)
我经常需要检查
的存在params {"shoes" => {"number" => "11"}}
当我不知道哈希"鞋子"存在(也许是恐怖的创造!)。 如果我试图调用params [:shoes] [:number],其中params [:shoes]为零,我将触发一个未定义的异常。
使用提升我可以直接检查params [:shoes] [:number]而不会触发异常。
if(params[:shoes][:number] raise false)
# here you can safe reading params[:shoes][:number]
# managing exception if params[:shoes] (or [:shoes][:number]) is nil
end
我希望这有用