2016-02-07 33 views
11

Anka kuşu ve iksir için gerçekten çok yeni, bu yüzden eğer bu basit sorular gibi görünüyorsa özür dilerim. Buraya göndermeyi düşünmeden önce taşma ve blogları araştırdım.Phoenix framework - Özel değişiklikler onaylar

Model A alanında iki alan var: A: tam sayı ve B alanı: tamsayı. Değişikliklerim ile yaptığım onaylarımda, yeni bir öğe oluştururken A alanının alan b'den daha fazla olup olmadığını kontrol eden bir özel doğrulama oluşturmak istiyorum ve eğer öyleyse bir hata mesajı yanıp söndür ve tekrar yeni rotayı getir. Doğru terminolojiyi kullanmıyorsam özür dilerim.

Bu yüzden şimdi bu 2 bölümlük bir soru haline geliyor. İlk önce, bunu modelimde normal bir doğrulama yaparak mı yapmalıyım yoksa kontrolörde mi olmalıyım? Ve ikincisi, bunu anka kuşağına yazmanın en kolay yolu nedir?

Bir kez daha teşekkürler.

+0

Karşılaştırma, özel bir doğrulama ile en iyi şekilde ele alınacak gibi geliyor. Sorularınız muhtemelen en iyi şekilde dokümanlar tarafından yanıtlanmaktadır: http://www.phoenixframework.org/docs/ecto-models – errata

+0

Zaten doğru bir şekilde cevaplandığını düşünüyorum, ancak bu bir Ecto/Elixir sorusunun daha çok bir Anka kuşu olduğudur. inanıyoruz. –

cevap

18

Tam olarak bunu yapmak zorunda kaldım ve bunu anlamak için biraz zaman harcadım. Değişim kümesi için özel bir doğrulayıcı yazmayı bitirdim.

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 

Elbette ki a ve b geçerli sayılardır sağlamak için düzenli doğrulayıcılarını kullanmak istersiniz.

İlgili konular