不确定我的术语是否正确,所以请改正。
看起来它过去就像传递带有更新参数的结构一样简单,这仍然是我找到的所有示例都被记录下来的方式,比如Repo.update!(%{room | body: "A Room"})。
但是现在似乎需要一些键/主键参数以及一个更改集,我只是不能将它按它想要的格式进行修改,尝试类似于Repo.update!(changeset, {id: 1})之类的东西,并得到如下错误:
** (FunctionClauseError) no function clause matching in Ecto.Repo.Schema.update/4
(ecto) lib/ecto/repo/schema.ex:216: Ecto.Repo.Schema.update(PingalServer.Repo, Ecto.Adapters.Postgres, #Ecto.Changeset<action: nil, changes: %{body: "A Room", name: "first"}, errors: [], data: #PingalServer.Room<>, valid?: true>, {:id, 1})
(ecto) lib/ecto/repo/schema.ex:135: Ecto.Repo.Schema.update!/4其中的变更集类似于:
#Ecto.Changeset<action: nil,
changes: %{body: "A Room", name: "first"}, errors: [],
data: #PingalServer.Room<>, valid?: true>我需要对变更集做更多的解读,但似乎应该有一些例子说明在新结构下更新是什么样子的?
谢谢!
发布于 2017-02-16 08:02:13
传递给Ecto.repo.update!/2 的第一个参数必须是更改集(即Ecto.Changeset结构)。请参阅ecto文件,并注意参数和返回值的类型定义。
%{room | body: "A Room"}只给你一张地图,而不是一个变更集。
但是,您可以将一些参数转换到从数据库获取的架构上,以构建更改集。
room
|> Ecto.Changeset.cast(%{body: "A Room"}, [:body])
|> Repo.update!()或者,如果您已经定义了Room.changeset/2 (例如,使用mix phoenix.gen.model生成模型),也可以使用它获得一个变更集
room
|> Room.changeset(%{body: "A Room"})
|> Repo.update!()https://stackoverflow.com/questions/42265114
复制相似问题