Korzystam z instrukcji IF w Ruby on Rails, aby spróbować sprawdzić, czy parametry żądania są ustawione. Niezależnie od tego, czy oba parametry są ustawione, pierwsza część poniższych instrukcji, jeśli blok zostanie wyzwolony. Jak mogę uruchomić tę część WYŁĄCZNIE, jeśli oba parametry [: jeden] i parametry [: dwa] są ustawione?
if (defined? params[:one]) && (defined? params[:two])
... do something ...
elsif (defined? params[:one])
... do something ...
end
ruby-on-rails
ruby
Darren
źródło
źródło
params
jest to metoda kontrolera Rails (która zdarza się zwrócić HashWithIndifferentAccess), chodzi o Railsy.Odpowiedzi:
Chcesz
has_key?
:Samo sprawdzanie
if(params[:one])
da się zwieść wartości „tam, ale zero” i „tam, ale fałsz” i pytasz o istnienie. Może być konieczne rozróżnienie:nil
.false
.także. Trudno powiedzieć bez dodatkowych szczegółów na temat Twojej dokładnej sytuacji.
źródło
nil
parametru. Jeśli parametr istnieje, będzie to pusty ciąg.params
nie zostało wcześniej przetworzone, zanim dotrzemy do miejsca, w którym sprawdzamy, co jest w środku . Stąd moja lista możliwych specjalnych przypadków do sprawdzenia. Najlepiej powiedzieć dokładnie, co masz na myśli IMHO.key?
metody. edgeapi.rubyonrails.org/classes/ActionController/…params.to_h.key?
teraz.Jestem fanem
params[:one].present?
Tylko dlatego, że zachowuje
params[sym]
formularz, dzięki czemu jest łatwiejszy do odczytania.źródło
has_key
zamiast tego daje ci to, czego szukasz.użyć pustego? http://api.rubyonrails.org/classes/Object.html#method-i-blank-3F
zwróci true, jeśli jest puste lub zero
także ... to nie zadziała, jeśli testujesz wartości boolowskie .. od tego czasu
w takim przypadku możesz użyć
źródło
present?
który zwraca przeciwieństwoblank?
. Więc można włączyć, żeunless
w produktif
, jeśli chciał.unless
jest w porządku. Ale tak, chciałbym lepiejif
zpresent?
Możesz napisać to bardziej zwięźle, jak poniżej:
źródło
Proste jak ciasto:
źródło
źródło
Bardzo prosty sposób na dostarczenie wartości domyślnych swoim parametrom:
params[:foo] ||= 'default value'
źródło
params.fetch(:foo, 'default value')
zbytWłaśnie przeczytałem to na klasach RubyInRails http://api.rubyonrails.org/classes/Object.html#method-i-blank-3F
możesz użyć
blank?
metody równoważnej doparams[:one].nil? || params[:one].empty?
(na przykład)
źródło
params[:one].nil? || params[:one].empty?
Możesz także wykonać następujące czynności:
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:
zwróci następujące elementy:
.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.
wszystko razem wyglądałoby to tak:
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.
źródło
Oprócz poprzednich odpowiedzi:
has_key?
ihas_value?
mają krótsze alternatywy w postacikey?
ivalue?
. Zespół Ruby sugeruje także stosowanie krótszych alternatyw, ale ze względu na czytelność niektórzy mogą nadal preferować dłuższe wersje tych metod.Dlatego w twoim przypadku byłoby to coś w rodzaju
NB!
.key?
sprawdzi tylko, czy klucz istnieje i zignoruje jakąkolwiek możliwą wartość. Na przykład:źródło
Oto co robię
a następnie następujące metody:
źródło
Właśnie złożyłem to razem dla tego samego problemu:
pierwsza linia sprawdza, czy nasze klucze docelowe są obecne w kluczach parametrów za pomocą podzbioru <=? operator. Enumerable.all? bez bloku domyślnie zwraca wartość false, jeśli dowolna wartość jest równa zero lub fałsz.
źródło
Możesz również sprawdzić, czy parametry są puste, używając params [: two] .empty
źródło
Próbuję spóźnić się, ale z daleka odpowiedź:
Jeśli chcesz wiedzieć, czy wartości w (dowolnym) haszu są ustawione, wszystkie powyższe odpowiedzi są prawdziwe, w zależności od ich punktu widzenia.
Jeśli chcesz przetestować swoje parametry (GET / POST ..), powinieneś użyć czegoś bardziej specjalnego od tego, czego oczekujesz, że będzie to wartość
params[:one]
, na przykładignorowanie parametru (GET / POST) tak, jakby nie były ustawione, jeśli nie pasują zgodnie z oczekiwaniami
tylko
if params[:one]
z wykrywaniem zerowym / prawdziwym lub bez niego to jeden krok, aby otworzyć stronę do hakowania, ponieważ zazwyczaj jest to następny krok, aby użyć czegoś takiegoselect ... where params[:one] ...
, jeśli jest to zamierzone lub nie, aktywne lub w ramach lub po frameworku.odpowiedź lub tylko podpowiedź
źródło