2015-06-26 14 views
13

Wie kann man das Vorhandensein eines zugeordneten Modells in Ecto validieren?Ecto - Vorhandensein des zugehörigen Modells validieren

schema "foo" do 
    has_many: bar, Bar 

    timestamps 
end 

@required_fields ~w(bar) # invalid 

Gibt es eine Möglichkeit, dies zu tun? Und validiere eine minimale/maximale Anzahl dieser Felder?

Antwort

17

Es gibt noch nichts. Aber Sie können diese Validierungen sich in Ihrer changeset Funktion ausführen:

def changeset(model, params) do 
    model 
    |> cast(...) 
    |> validate_bar_association() 
end 

def validate_bar_association(changeset) do 
    bar = changeset.model.bar 
    cond do 
    bar == nil -> 
     add_error changeset, :bar, "No bar" 
    length(bar) < 5 -> 
     changeset 
    true -> 
     add_error changeset, :bar, "waaaay too many" 
    end 
end 

Wir wollen, um verschachtelte Verbände besser zu machen, aber es gibt auch andere Artikel weiter oben auf unserer Prioritätenliste. :)

+2

Nur eine Anmerkung - in Ecto 2.0 existiert das Modell nicht mehr. Verwenden Sie stattdessen "changeset.data.bar". – sat

Verwandte Themen