2015-06-26 20 views
13

Ecto'da ilişkili modelin varlığını nasıl doğrulayabilirim?Ekto - ilişkili modelin varlığını doğrulayın

schema "foo" do 
    has_many: bar, Bar 

    timestamps 
end 

@required_fields ~w(bar) # invalid 

Bunu yapmanın bir yolu var mı? Ve bu alanların bir min/max sayısını doğrulayın?

cevap

17

Henüz bir şey yok.

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 

Biz daha iyi iç içe ilişkilendirmeleri yapmak istiyorsunuz ama öncelik listemizin diğer öğeleri daha yukarı vardır: Ama sen changeset işlevinde bu doğrulamaları kendiniz çalıştırabilirsiniz. :)

+2

Sadece bir not - Ecto 2.0'da model artık mevcut değil. Bunun yerine "changeset.data.bar" kullanın. – sat