2016-02-07 13 views
11

Jestem naprawdę nowy dla feniksa i eliksiru, więc przepraszam, jeśli wydają się one prostymi pytaniami. Szukałem przepełnienia stosu i blogów, zanim pomyślałem o umieszczeniu tego tutaj.Frameworki Phoenix - niestandardowe zatwierdzenia zestawu zmian

Mam 2 pola w modelu, pole A: liczba całkowita i pole B: liczba całkowita. Podczas wykonywania walidacji z moim zestawem zmian chcę utworzyć niestandardową walidację sprawdzającą, czy pole A jest większe niż pole b podczas tworzenia nowego elementu, a jeśli tak, wówczas należy wysłać komunikat o błędzie i przywrócić go do: nowej trasy. Przepraszam, jeśli nie używam właściwej terminologii.

Sądzę więc, że teraz staje się to 2-częściowe pytanie. Po pierwsze, czy powinienem to zrobić nawet w moim modelu, tworząc niestandardową walidację lub czy powinien to być kontroler? A po drugie, jaki jest najprostszy sposób, aby napisać to w feniksie?

Jeszcze raz dziękuję.

+0

brzmi jak porównanie najlepiej byłoby obsługiwane przez niestandardowe sprawdzanie poprawności. Na twoje pytania najlepiej odpowiedzieć w dokumentach: http://www.phoenixframework.org/docs/ecto-models – errata

+0

Myślę, że odpowiedź została już udzielona poprawnie, ale jest to raczej pytanie Ecto/Elixir, że Phoenix to ja uwierzyć. –

Odpowiedz

18

Musiałem zrobić to dokładnie i zajęło mi trochę czasu, aby to rozgryźć. Zakończyłem pisanie niestandardowego sprawdzania poprawności dla zestawu zmian.

def changeset(model, params \\ :empty) do 
    model 
    |> cast(params, @required_fields, @optional_fields) 
    |> validate_a_less_eq_b 
end 

defp validate_a_less_eq_b(changeset) do 
    a = get_field(changeset, :a) 
    b = get_field(changeset, :b) 

    validate_a_less_eq_b(changeset, a, b) 
end 
defp validate_a_less_eq_b(changeset, a, b) when a > b do 
    add_error(changeset, :max, "'A' cannot be more than 'B'") 
end 
defp validate_a_less_eq_b(changeset, _, _), do: changeset 

Oczywiście chciałbyś użyć zwykłych weryfikatorów, aby upewnić się, że a i b są poprawnymi liczbami.

Powiązane problemy