我使用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

当前回答

使用空白的?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?

其他回答

if params[:one] && param[:two]
  ... excute code ..
end

你也可以使用params[:two].empty来检查参数是否为空

我是这么做的,

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 [:] .present吗?

只是因为它保持了params[sym]形式,所以更容易阅读。

你可以这样写得更简洁:

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

如果你希望能够根据特定的缺失参数返回一个错误,而不必切换所有参数:

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