2016-08-20 5 views
0

필드에 몇 가지 필드가있는 경우에만 모델에 대한 유효성 검사를 구현하려고합니다. 그와 마찬가지로필드가있는 경우 Ecto 조건부 유효성 검사

:

if Changeset.get_field(changeset, :field_a) or Changeset.get_field(changeset, :field_b) do 
    changeset 
    |> a_lot_of_validations 
else 
    changeset 
end 

문제는 다음과 같습니다 field_a 또는 field_b 현재, 그들은 string 반환, 그래서 인수 오류가 불로 불사의 영약으로하면 ArgumentError

"string" or "string" 

반환 becauase, 여기 발생할 때. not(is_nil(get_field))을 구현하면 선 길이가 길어지기 때문에 (지금은 길다)이 조건부 유효성 검사를 구현하는 명확한 방법이 궁금합니다.

답변

2
대신 not(is_nil(_))

or, 당신은 단지 취급 ||을 사용할 수 있습니다 nilfalse로 falsy 및 문자열 필드에 false을 반환하지 않습니다 Ecto.Changeset.get_field로 truthy 같은 다른 모든 : 이미 Ecto.Changeset이있는 경우

if Changeset.get_field(changeset, :field_a) || Changeset.get_field(changeset, :field_b) do 
    changeset 
    |> a_lot_of_validations 
else 
    changeset 
end 

가져온 파일은 기본적으로 Phoenix 모델에서 가져옵니다. Changeset. :

if get_field(changeset, :field_a) || get_field(changeset, :field_b) do 
    changeset 
    |> a_lot_of_validations 
else 
    changeset 
end 
+0

나는 전에이'||'vs'또는''특이성을 알지 못했다. 감사! – asiniy