我使用Rails 3.0.x,Ruby 1.9.2并且需要一种方法来测试可能存在或不存在的参数,例如,
params[:user] #exists
params[:user][:login] #may not exist
第二次检查的正确Ruby语法是什么,所以它不会barf?
答案 0 :(得分:2)
请尝试以下操作:
params.has_key? :user #=> true because exists
params[:user].has_key? :login #=> true if exist otherwise false
答案 1 :(得分:1)
@WarHog说得对,差不多。 params
中的某个项目有时会返回一个字符串,但其他时候会返回一个Hash,这是非常不寻常的,但是无论你能够轻松地处理它,都是非常不可能的:
if params.has_key?(:user) && params[:user].respond_to?(:has_key?)
do_something_with params[:user][:login]
end
而不是respond_to? :has_key?
您也可以respond_to? :[]
或is_a? Hash
。主要是偏好问题。
答案 2 :(得分:0)
你只会在第二种情况下获得 ..这不应该是一个问题,不是吗?
例如params[:user][:login]
只返回nil,如果第一个哈希中存在:user条目,则结果为false。
但是,如果嵌套的深度是一个或多个级别,并且缺少的哈希条目位于中间的某个位置,则会出现问题。 e.g:
params[:user][:missing_key][:something]
在这种情况下,Ruby会尝试评估nil [:something]并引发异常
你可以这样做:begin
x = params[:user][:missing_key][:something]
rescue
x = nil
end
......你可以进一步抽象......