2017-11-21 1 views
0

저는 엘릭시르를 배우는 중이며지도가 함수의 인자가되는 스타일을 이해하지 못합니다. 당신이 볼 수있는 가장 일반적인 장소는 다음과 같이 컨트롤러에 있습니다함수에서 인자를 매핑하십시오.

CONTROLLER 그래서
def create(conn, %{"league" => league_params}) do 
    league = %League{} 
    |> League.changeset(league_params) 
    |> Repo.insert() 

    case league do 
    {:ok, league} -> 
     conn 
     |> put_flash(:info, "League Created Successfully.") 
     |> redirect(to: page_path(conn, :index)) 
    {:error, %Ecto.Changeset{} = changeset} -> 
     render(conn, "new.html", changeset: changeset) 
    end 
end 

create/2 기능. 두 번째 인수는 다음과 같습니다. %{"league" => league_params}. 내가 틀렸다면 정정하되지도는지도입니다. 그렇다면 League.changeset("league") 대신 League.changeset(league_params) 아래의 값을 참조해야하는 이유는 무엇입니까?

이것은 바보 같은 질문처럼 보일지 모르지만 나는이 것을 파악할 수 없으며이 질문에 대한 문서를 찾을 수 없습니다. 도와 주셔서 감사합니다.

답변

3

지도 패턴에서 키는지도 키와 일치시킬 값이고 값은 해당 키 값을 바인딩하는 패턴입니다. 예를 들어, 패턴 %{"foo" => x}%{"foo" => 123} 맵과 성공적으로 일치하며 일치 결과로 x123에 바인딩됩니다.

은 마찬가지로, 귀하의 예제에서, league_paramsleague_params이 변경 집합에 전달되는 이유 params지도의 "league" 키의 값에 바인딩됩니다. 이 코드는 함수 본체에 def create(conn, params)을 수행 한 다음 league_params = params["league"]과 거의 같습니다. (거의 값이 없으면 패턴 일치는 실패하지만이 코드는 league_paramsnil으로 설정합니다.)

관련 문제