2015-12-05 53 views
0

想知道是否有人能夠給我一個我一直在努力的東西。如何處理在phoenix/ecto上創建嵌套記錄?

長話短說,我有一個模型「用戶」和另一個「配置文件」。個人資料belongs_to用戶和用戶has_one個人資料。目前爲止所有的都很好..

當用戶註冊時,我需要用戶模型的電子郵件和密碼以及屬於配置文件模型的名字和姓氏。 我的問題是..我如何處理插入用戶記錄與我的RegistrationController配置文件?

這裏是控制器目前看起來像(基於什麼我可以從聖何塞的帖子收集有關協會和嵌入 -

def create(conn, %{"user" => user_params}) do 
    changeset = User.changeset(%User{profile: %Profile{}}, user_params) 
       |> Password.generate_password 

    case Repo.insert(changeset) do 
     {:ok, user} -> 
     conn 
     |> put_flash(:info, "You have successfully registered and logged in.") 
     |> put_session(:current_user, user) 
     |> redirect(to: page_path(conn, :index)) 
     {:error, changeset} -> 
     render(conn, "new.html", changeset: changeset) 
    end 
end 

注:Passoword.generate_password什麼也不做,但有一個散列更換密碼,並返回變更。

我證實,確實user_params包含個人資料信息..

但這會引發錯誤事做......

... ASSOCS只能通過變更操縱,無論是在插入,更新或刪除...

我一直在爲此而努力了一段時間,將是驚人的,如果有人可以幫助:/

在此先感謝!

回答

2

我已經想通了。需要

變更應改爲:

changeset = User.changeset(%User{}, user_params) 
      |> Password.generate_password 

,瞧! :)