2017-08-18 38 views
1

私がしようとしているのは、フィールドの値として空の文字列を渡し、それがnilでないかどうかを確認するために検証します。問題は、validate_requiredがnil値とブランク値の両方でエラーを発生させることです。空白の値を受け入れる方法Ecto.changeset validate_requiredに空白値を受け入れる方法は?

スキーマ

schema "messages" do 
    field :user_id, :string 
    field :text, :string 

    timestamps() 
    end 

チェンジ

def changeset(struct, params \\ %{}) do 
    struct 
    |> cast(params, [:text, :user_id]) 
    |> validate_required([:text, :user_id]) 
    end 

答えて

3

validate_requiredの行動が、残念ながら欠けているように空だけでなく、空白文字列のみを考慮するhardcodedです。ただし、検証を行うには、簡単な関数を書くことができます。

def changeset(struct, params \\ %{}) do 
    struct 
    |> cast(params, [:text, :user_id]) 
    |> validate_not_nil([:text, :user_id]) 
end 

def validate_not_nil(changeset, fields) do 
    Enum.reduce(fields, changeset, fn field, changeset -> 
    if get_field(changeset, field) == nil do 
     add_error(changeset, field, "nil") 
    else 
     changeset 
    end 
    end) 
end 

関数が値nilを持つすべてのフィールドにエラーを追加し、各フィールドの上に行きます。

+0

速い返信と魅力のように動作します。ありがとう:D – Razinar

関連する問題