我使用Ruby on Rails中的IF语句来尝试和测试是否设置了请求参数。无论是否设置了两个参数,都会触发下面if块的第一部分。我怎么能让这部分只被触发,如果两个params[:one]和params[:two]都设置了?
if (defined? params[:one]) && (defined? params[:two])
... do something ...
elsif (defined? params[:one])
... do something ...
end
我使用Ruby on Rails中的IF语句来尝试和测试是否设置了请求参数。无论是否设置了两个参数,都会触发下面if块的第一部分。我怎么能让这部分只被触发,如果两个params[:one]和params[:two]都设置了?
if (defined? params[:one]) && (defined? params[:two])
... do something ...
elsif (defined? params[:one])
... do something ...
end
当前回答
如果你希望能够根据特定的缺失参数返回一个错误,而不必切换所有参数:
required_params = [:one, :two, :three]
required_params.each do |param|
if params.has_key?(param)
render json: { errors: "Missing parameter #{param.to_s}." }, :status => :bad_request
return
end
end
其他回答
我是这么做的,
before_action :validate_presence
然后是以下几种方法:
def check_presence
params[:param1].present? && params[:param2].present?
end
def validate_presence
if !check_presence
render json: {
error: {
message: "Bad Request, parameters missing.",
status: 500
}
}
end
end
简单如馅饼:
if !params[:one].nil? and !params[:two].nil?
#do something...
elsif !params[:one].nil?
#do something else...
elsif !params[:two].nil?
#do something extraordinary...
end
我是一个粉丝
params [:] .present吗?
只是因为它保持了params[sym]形式,所以更容易阅读。
你想要has_key?:
if(params.has_key?(:one) && params.has_key?(:two))
只是检查if(params[:one])会被“there but nil”和“there but false”的值所愚弄,你正在询问是否存在。你可能需要区分:
根本不在那里。 只有零。 但这是假的。 这里只有一个空字符串。
也如果不了解你的具体情况,这很难说。
你可以这样写得更简洁:
required = [:one, :two, :three]
if required.all? {|k| params.has_key? k}
# here you know params has all the keys defined in required array
else
...
end