2016-05-18 32 views
2

我在我的Phoenix應用程序中爲其創建變更集的嵌套資源。問題是Ecto.build_assoc預計地圖有原子鍵,但我的參數有字符串鍵。爲嵌套資源創建變更集的正確方法是什麼?如何創建嵌套資源w/Ecto/Phoenix的變更集

def create(conn, %{"component" => component_params}, generator) do 
    changeset = Ecto.build_assoc(generator, :components, component_params) # attributes don't get set 
    ... 
end 

回答

2

呼叫您changeset功能,如果寫的傳統,將處理你正在尋找使用Ecto.Changeset.Cast/4鑄造。 Phoenix/Ecto故意不信任原始用戶輸入。變更集是處理這一問題的「Ecto方法」。

這裏是處理你會在你的控制器操作更爲方便的方法:

def create(conn, %{"component" => component_params}, generator) do 
    changeset = 
    generator 
    |> Ecto.build_assoc(:components) 
    |> Component.changeset(component_params) 
    ... 
end 

既然你有component.ex是這樣的:

def changeset(model, params \\ :empty) do 
    model 
    |> cast(params, @required_fields, @optional_fields) 
end