我有一个可选的 URL 参数,比如我需要检查的“user_id”。我知道我可以使用
if params.has_key?(:user_id) ...
根据参数的存在来做事user_id
,但有时user_id
是不带值传递的,所以我想完全忽略它。为了解决这个问题,我发现自己经常这样做——但必须有更好的方法,对吧?
if params[:user_id] && !params[:user_id].empty?
# Do stuff
end
它看起来真的很丑。
我有一个可选的 URL 参数,比如我需要检查的“user_id”。我知道我可以使用
if params.has_key?(:user_id) ...
根据参数的存在来做事user_id
,但有时user_id
是不带值传递的,所以我想完全忽略它。为了解决这个问题,我发现自己经常这样做——但必须有更好的方法,对吧?
if params[:user_id] && !params[:user_id].empty?
# Do stuff
end
它看起来真的很丑。
如果您只是检查是否params[:user_id]
存在,那么您可以尝试:
if params[:user_id].present?
# do stuff
end
怎么用Hash#fetch
?
if params.fetch(:user_id, nil).present?
# Do stuff
end
我经常需要检查是否存在
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
我希望这有帮助