我使用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
当前回答
if params[:one] && param[:two]
... excute code ..
end
你也可以使用params[:two].empty来检查参数是否为空
其他回答
使用空白的?http://api.rubyonrails.org/classes/Object.html#method-i-blank-3F
unless params[:one].blank? && params[:two].blank?
将返回真,如果它为空或nil
也……这将不会工作,如果你是测试布尔值..自
>> false.blank?
=> true
那样的话你可以用
unless params[:one].to_s.blank? && params[:two].to_s.blank?
我是一个粉丝
params [:] .present吗?
只是因为它保持了params[sym]形式,所以更容易阅读。
这是针对同一个问题拼凑出来的:
before_filter :validate_params
private
def validate_params
return head :bad_request unless params_present?
end
def params_present?
Set.new(%w(one two three)) <= (Set.new(params.keys)) &&
params.values.all?
end
第一行使用<=子集?检查目标键是否存在于参数的键中。操作符。 Enumerable.all吗?如果任何值为nil或false,则返回false。
我是这么做的,
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
params[:foo] ||= '默认值'