Вы также можете сделать следующее:
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.Он вернет истину, если массив содержит ноль.
В некоторых случаях вы также можете проверить, что параметры не содержат, и пустую строку в значении false.
Вы можете обработать эти значения, добавив следующий код над оператором exc.
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 изменит ваши хеш / параметры, поэтому используйте с осторожностью.
Приведенное выше решение явно требует немного больше усилий для настройки, но оно того стоит, если вы проверяете больше, чем один или два параметра.