更新Ecto变更集中的未经许可的值

问题描述 投票:0回答:1

我想在模式的变更集中更新一些不是permitted属性的元数据:

def changeset(%Comment{} = comment, attrs) do
  comment
  |> cast(attrs, [:text])
  |> validate_required([:text])
end

然后是这样的:

changeset = Comment.changeset(commet, %{under_moderation: true})

Repo.update(changeset)

由于under_moderation未列入白名单,因此会被忽略。我有什么选择来强制更新?如果有多个选项,是否有约定?

phoenix-framework ecto
1个回答
1
投票

我只想创建另一个有权设置值的变更集函数。

def admin_changeset(%Comment{} = comment, attrs) do
  comment
  |> cast(attrs, [:text, :under_moderation])
  |> validate_required([:text])
end

然后只需使用它来更新值。正如您所看到的,我将其命名为admin_changeset,因为它似乎是一个由管理员设置的值。在您的控制器或上下文模块中,只需检查用户角色(如果您有类似的内容),然后决定要使用哪个变更集功能。

© www.soinside.com 2019 - 2024. All rights reserved.