使用Ecto one-liner更新字段?

时间:2018-01-18 16:24:27

标签: elixir ecto

在Ruby中,我可以去:

User.find_by(email: "foobar@email.com").update(email: "hello@email.com")

我如何在Elixir中做类似的事情?

Ecto.Changeset.change(MyApp.User |> where(email: "foobar"), email: "barbaz") |> MyApp.Repo.update

2 个答案:

答案 0 :(得分:0)

您可以在查询中使用set:并使用Repo.update_all/1

运行它
from(
  u in User,
  where: u.email == "foobar@email.com",
  update: [set: [email: "hello@email.com"]]
) |> Repo.update_all([])

答案 1 :(得分:0)

您可以执行以下操作:

from(u in MyApp.User, where: u.email == "sergio@email.com") |> MyApp.Repo.update_all(set: [email: "sergiox@email.com"])