Вы также можете сделать следующее:
unless params.values_at(:one, :two, :three, :four).includes?(nil)
... excute code ..
end
Я склонен использовать вышеупомянутое решение, когда хочу проверить более одного или двух параметров.
.values_at возвращает и массив с nil вместо любого неопределенного ключа param. то есть:
some_hash = {x:3, y:5}
some_hash.values_at(:x, :random, :y}
вернет следующее:
[3,nil,5]
.include? (nil) затем проверяет массив на наличие значений nil. Он вернет истину, если массив содержит ноль.
В некоторых случаях вы также можете проверить, что параметры не содержат и пустую строку на ложное значение.
Вы можете обработать эти значения, добавив следующий код над оператором "исключение".
params.delete_if{|key,value| value.blank?}
все вместе это будет выглядеть так:
params.delete_if{|key,value| value.blank?}
unless params.values_at(:one, :two, :three, :four).includes?(nil)
... excute code ..
end
Важно отметить, что delete_if изменит ваши хеш / параметры, поэтому используйте их с осторожностью.
Приведенное выше решение явно требует немного больше усилий для настройки, но оно того стоит, если вы проверяете больше, чем один или два параметра.
params
это метод контроллера Rails (который возвращает HashWithIndifferentAccess), речь идет о Rails.