9

我有一个可选的 URL 参数,比如我需要检查的“user_id”。我知道我可以使用

if params.has_key?(:user_id) ...

根据参数的存在来做事user_id,但有时user_id是不带值传递的,所以我想完全忽略它。为了解决这个问题,我发现自己经常这样做——但必须有更好的方法,对吧?

if params[:user_id] && !params[:user_id].empty?
  # Do stuff
end

它看起来真的很丑。

4

3 回答 3

17

如果您只是检查是否params[:user_id]存在,那么您可以尝试:

if params[:user_id].present?
  # do stuff
end
于 2012-10-03T14:44:51.580 回答
1

怎么用Hash#fetch

if params.fetch(:user_id, nil).present?
  # Do stuff
end
于 2012-10-03T14:42:01.027 回答
0

我经常需要检查是否存在

params {"shoes" => {"number" => "11"}}

当我不知道哈希“鞋子”是否存在时(可能是动态创建的!)。如果我尝试在 params[:shoes] 为 nil 的情况下调用 params[:shoes][:number],我将触发未定义的异常。

使用raise我可以直接检查 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

我希望这有帮助

于 2017-04-24T07:12:19.850 回答