Często piszę to:
params.delete(:controller)
params.delete(:action)
params.delete(:other_key)
redirect_to my_path(params)
Ścieżka usuwania nie wydaje się odpowiednia, podobnie jak:
[:controller, :action, :other_key].each do |k|
params.delete(k)
end
Czy jest coś prostszego i czystszego?
ruby-on-rails
ruby
Mark Westling
źródło
źródło
Hash#except!
aleHash#except
jest drogą do zrobienia (nie zadzierajparams
!). Z reguły nie rób bałaganu z żadnym obiektem na miejscu, chyba że jest to absolutnie wymagane, ponieważ efekty uboczne mogą mieć nieoczekiwane rezultaty.Odpowiedzi:
Domyślam się, że nie jesteś świadomy Hash # z wyjątkiem metody ActiveSupport, która dodaje do Hash.
Pozwoliłoby to na uproszczenie kodu do:
Nie musiałbyś też małpować łatek, ponieważ zespół Rails zrobił to za Ciebie!
źródło
except!
zrobił. Rails 3.0User.attributes.except("id", "created_at", "updated_at")
symbole nie działałyattributes
metoda ActiveRecord zwraca aHash
z kluczami, które sąString
. Więc wtedy musiałbyś używać nazw kluczy w.except()
. JednakHash.symbolize_keys
@user.attributes.symbolize_keys.except(:password, :notes)
symbolize_keys
Podczas używania
Hash#except
rozwiązuje problem, pamiętaj, że wprowadza potencjalne problemy z bezpieczeństwem . Dobrą praktyczną zasadą postępowania z danymi od odwiedzających jest użycie metody białej listy. W tym przypadku użycieHash#slice
zamiast.źródło
{:b=>2, :c=>3}:Hash
Byłbym całkowicie zadowolony z kodu, który zamieściłeś w swoim pytaniu.
źródło
Hash
to najlepsza odpowiedź: +1:Innym sposobem wyrażenia odpowiedzi dmathieu może być
źródło
Odpalić małpę?
źródło
delete(k)
zamiastdelete(key)
delete_keys
zachować kod, implementacja nieniszczącej powinna być prostadup.delete_keys!(*keys)
Nie wiem, co Twoim zdaniem jest niewłaściwe w proponowanym rozwiązaniu. Przypuszczam, że chcesz
delete_all
metodę na Hash czy coś? Jeśli tak, odpowiedź Tadmana dostarcza rozwiązania. Ale szczerze, jednorazowo, myślę, że twoje rozwiązanie jest niezwykle łatwe do zastosowania. Jeśli używasz tego często, możesz chcieć zawrzeć to w metodzie pomocniczej.źródło