如何在不触及ecto中的updated_at的情况下更新模型?

asi*_*niy 1 elixir ecto phoenix-framework

我有非常简单的代码,只在列上更改,如:

content = Content
  |> Repo.get(1)

content
|> Ecto.Changeset.change(%{ views_count: content.views_count + 1 })
|> Repo.update
Run Code Online (Sandbox Code Playgroud)

我不希望此代码更改其视图计数,但我不想触摸updated_at字段.我怎样才能做到这一点?

NoD*_*ame 6

我不确定我是否理解这个问题,但这可能有效:

Content
|> where(id: 1)
|> Repo.update_all(inc: [views_count: 1])
Run Code Online (Sandbox Code Playgroud)

  • @AbM原始代码获取`views_count`,然后分两步将其设置为`views_count + 1`.如果另一段代码修改了它们之间的行,那么它所做的更改将会丢失.使用`inc`运行单个查询,确保不会发生这样的事情(至少不是由于这个查询的错误). (5认同)
  • 这很好,也修复了OP代码中的竞争条件. (2认同)