2016-02-03 7 views
5

In einem Phoenix Framework-Formular habe ich ein Auswahlfeld auf meiner Seite, das eine Option hat, einen Wert für "belongs_to" auf null zu setzen.Wie kann ich in einer Phoenix Framework-Form eine angies_to-Relation mithilfe eines Changesets auf null zurücksetzen?

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

Die Form in der Regel die ID senden würde, aber wenn der Nullwert ausgewählt wird, geht es um den Wert als eine leere Zeichenfolge:

"relation_id" => "" 

erhalte ich einen Fehler von Ecto, dass die changeset ungültig , da es eine Ganzzahl erwartet. Ich könnte wahrscheinlich die Karte abfangen, den Wert auf null setzen und die aktualisierte Karte in den Änderungssatz übergeben. Aber gibt es einen einfacheren Weg, dies zu tun?

+0

Wie laden Sie das 'relations' Feld in Ihrem Controller? Kann kein Beispiel dafür finden, wie man es mit einem Changeset macht. Danke – Paco

+0

Ahh - die Auswahl erwartet nur eine Grundliste von Tupeln und kann beliebig generiert werden. In diesem Fall war @relations nur ein direkter Pull mit Repo.all: relations = Repo.all (relations_query) und dann in der Ansicht im Befehl render übergeben. –

Antwort

5

Ich denke, Sie sollten den Stecker scrub params verwenden.

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

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

    # def .... 
end 

Es wird konvertieren "" (leer) Werte nil Werte:

Versuchen Sie, Ihren Controller hinzuzufügen.

Ich hoffe, es hilft.