2017-10-26 9 views
0

난에 전달 된 매개 변수의 수를 기반으로 일치하는 내 스키마 중 하나에 두 개의 변경 집합 절을하고 싶습니다.패턴 일치 매개 변수

첫 번째 변경 집합이 경우에만 이름과 VENDOR_ID을 일치합니다 (다른 분야는 없음). namevendor_id 및 기타 매개 변수가 전달 될 때

Product.changeset(struct, params)

불행하게도 첫 번째 변경 집합이 호출됩니다

Product.changeset(struct, %{ name: name, vendor_id: vendor_id })

두 번째 변경 집합은 다른 모든 것들과 일치합니다.

변경 집합을 구성하여 내가 원하는대로 할 수 있는지 잘 모르겠습니다.

답변

3

map_size/1은이를 보호 할 수 있습니다. 매우 우아한 해결책은 아닙니다 (가드의 크기를 하드 코딩해야 함). 그러나 패턴 매칭 맵은 여분의 필드를 무시하므로 더 나은 방법을 생각할 수 없습니다.

def changeset(struct, %{name: name, vendor_id: vendor_id} = params) when map_size(params) == 2 do 
    ... 
end 
def changeset(struct, params) do 
    ... 
end