Możesz także wykonać następujące czynności:
unless params.values_at(:one, :two, :three, :four).includes?(nil)
... excute code ..
end
Zazwyczaj używam powyższego rozwiązania, gdy chcę sprawdzić więcej niż jeden lub dwa parametry.
.values_at zwraca i tablicę z zerem w miejsce dowolnego niezdefiniowanego klucza param. to znaczy:
some_hash = {x:3, y:5}
some_hash.values_at(:x, :random, :y}
zwróci następujące elementy:
[3,nil,5]
.include? (zero) następnie sprawdza tablicę pod kątem jakichkolwiek wartości zero. Zwróci wartość true, jeśli tablica zawiera zero.
W niektórych przypadkach możesz również chcieć sprawdzić, czy parametry nie zawierają pustego łańcucha o wartości false.
Można obsłużyć te wartości, dodając następujący kod nad instrukcją chyba.
params.delete_if{|key,value| value.blank?}
wszystko razem wyglądałoby to tak:
params.delete_if{|key,value| value.blank?}
unless params.values_at(:one, :two, :three, :four).includes?(nil)
... excute code ..
end
Ważne jest, aby pamiętać, że delete_if zmodyfikuje twój skrót / parametry, więc używaj go ostrożnie.
Powyższe rozwiązanie najwyraźniej wymaga nieco więcej pracy, ale jest tego warte, jeśli sprawdzasz więcej niż tylko jeden lub dwa parametry.
params
jest to metoda kontrolera Rails (która zdarza się zwrócić HashWithIndifferentAccess), chodzi o Railsy.