【问题标题】:How to handle creation of nested records on phoenix/ecto?如何处理在 phoenix/ecto 上创建嵌套记录?
【发布时间】:2015-12-06 07:47:39
【问题描述】:

想知道是否有人能帮我解决我一直在努力解决的问题..

长话短说,我有一个模型“用户”和另一个“配置文件”。 Profile belongs_to User 和 User has_one Profile。到目前为止一切顺利..

当用户注册时,我需要用户模型的电子邮件和密码以及属于配置文件模型的名字和姓氏。 那么我的问题是.. 我如何处理在我的RegistrationController 中插入用户记录和个人资料?

这是控制器当前的样子(基于我从 Jose 的关于关联和嵌入的帖子中收集到的信息 -

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 确实包含个人资料信息..

但这会引发与...有关的错误

...Assoc 只能通过变更集进行操作,无论是插入、更新还是删除...

我已经为此苦苦挣扎了一段时间,如果有人能提供帮助,那就太棒了:/

提前致谢!

【问题讨论】:

    标签: elixir phoenix-framework ecto


    【解决方案1】:

    我想通了。

    变更集需要更改为:

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

    瞧! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多