2016-04-30 60 views
3

那麼我想在我的ecto模型中添加自定義驗證規則。如何將自定義驗證規則應用於phoenix框架中的模型

比方說,我有這樣的代碼:

def changeset(model, params \\ :empty) do 
    model 
    |> cast(params, @required_fields, @optional_fields) 
    |> validate_length(:description, min: 280) 
    |> my_awesome_validation(:email) 
    end 

    def my_awesome_validation(email) do 
    # ?? 
    end 

我應該在my_awesome_validation功能寫入拋出一個錯誤等等?

回答

7

你把管道輸入到my_awesome_validation的方式,它會得到changeset作爲第一個參數和原子:email作爲第二個。

這是如果給定的字段包含至少一個@你將如何驗證:

def my_awesome_validation(changeset, field) do 
    value = get_field(changeset, field) 
    if value =~ "@" do 
    changeset 
    else 
    add_error(changeset, field, "does not contain '@'") 
    end 
end