2015-10-24 24 views
10

Próbuję znaleźć sposób na sprawdzenie, czy hash params w aplikacji Phoenix (przy użyciu Elixir) ma określony klucz, czy nie.Sprawdź, czy mapa eliksiru nie jest pusta i istnieje klucz

W poniższej funkcji zestawu zmiennych w modelu parametry są domyślnie: puste.

def changeset(model, params \\ :empty) do 

Muszę dowiedzieć się, czy w nazwie hasha znajduje się klucz o nazwie: nazwa użytkownika.

Odpowiedz

12

Po prostu mała rzecz terminologiczna, params to mapa, a nie hash. Jest to istotne, gdy wiemy, gdzie szukać w dokumentacji.

Dla mapy istnieje has_key?/2, która zwraca true lub false.

Map.has_key?(params, :name) 

Ponieważ używasz zestawu zmian Ecto, możesz również użyć Ecto.Changeset.get_change/3.

get_change(changeset, key, default \\ nil) 

ta zwraca default jeśli key nie jest ustawiony. Pamiętaj, że jeśli key ustawiono na nil, to nadal będzie zwracana nil. Jeśli nil jest dozwoloną wartością dla zmiany, możesz chcieć ustawić inny domyślny parametr.

9

Odpowiedź Gazelera jest oczywiście bardzo dobra. Dodałabym jedynie dopasowanie do wzorca, ponieważ wydaje mi się, że jest to najczystsze rozwiązanie, które działa nie tylko z feniksem, ale z dowolną mapą w dowolnym miejscu w Elixir.

# head-only declaration for default params 
def changeset(model, params \\ :empty) 

def changeset(model, %{"username" => _} = params) do 
    # username field is in params 
end 

def changeset(model, params) do 
    # username is not in params 
end 
Powiązane problemy