【发布时间】:2016-10-28 16:24:24
【问题描述】:
我无法使用 ecto 更新嵌套设置,我要么得到“无更改”变更集,要么出现错误。迁移:
def change do
create table(:trees) do
...
add :settings, :map
设置如下:
defmodule Final.TreeSettings do
use Ecto.Schema
embedded_schema do
...
field :columns, :map
timestamps
end
end
注意嵌套列映射。
我可以像这样轻松插入新的树行:
changeset = Tree.changeset(%Tree{}, %{user_id: user_id, name: x})
|> Ecto.Changeset.put_embed(:settings, treeSettings)
但是以同样的方式更新它是行不通的:
get_tree = Repo.one! from p in Tree, where: p.name == ^tree["name"], where: p.user_id == ^user_id
settingss = get_tree.settings
settingss = Kernel.update_in(settingss.columns[tree["setting"]][tree["type"]], fn x -> "asdasd" end)
# IO.inspect(settingss) shows correct changes here.
changeset =
get_tree
|> Ecto.Changeset.change
|> Ecto.Changeset.put_embed(:settings, settingss)
IO.inspect changeset
给:
#Ecto.Changeset<action: nil, changes: %{}, errors: [], data: #Final.Tree<>,
valid?: true>
【问题讨论】: