2016-02-03 17 views
5

W formularzu Phoenix Framework mam pole wyboru na mojej stronie, które ma opcję ustawienia wartości belongs_to na zero.W formularzu Phoenix Framework, jak ustawić relację belongs_to z powrotem na null, używając zestawu zmian?

<%= select f, :relation_id, 
    Enum.into(Enum.map(@relations, fn p -> {p.name, p.id} end), 
    [{"None", nil}]) %> 

Formę zazwyczaj wysłać identyfikator, ale gdy jest wybrana wartość zero, to przekazuje wartość jako pusty ciąg:

"relation_id" => "" 

Otrzymuję błąd z Ecto że changeset jest nieprawidłowy , ponieważ oczekuje liczby całkowitej. Prawdopodobnie mógłbym przechwycić mapę, ustawić wartość na null i przekazać zaktualizowaną mapę do zestawu zmian. Ale czy jest łatwiejszy sposób na zrobienie tego?

+0

Jak wstępnie wczytać pole 'relations' w kontrolerze? Nie można znaleźć przykładu, jak to zrobić za pomocą zestawu zmian. Dzięki – Paco

+0

Ahh - wybrana po prostu oczekuje podstawowej listy krotek i może zostać wygenerowana w dowolny sposób. W tym przypadku @relations było po prostu pociąganiem prostym za pomocą funkcji Repo.all: relations = Repo.all (relations_query), a następnie przekazywane do widoku w komendzie render. –

Odpowiedz

5

Myślę, że powinieneś użyć wtyczki scrub params.

próby dodania do kontrolera:

defmodule MyApp.SomeThingController do 
    use MyApp.Web, :controller 

    plug :scrub_params, "some_thing" when action in [:create, :update] 

    # def .... 
end 

To będzie konwertować "" (pusty) wartości nil wartości.

Mam nadzieję, że to pomaga.