Elixir 如何将关联传递到EXTO中的变更集?

Elixir 如何将关联传递到EXTO中的变更集?,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我有一个非常简单的注释模型: schema "comments" do field :content, :string belongs_to :user, MyApp.User timestamps end 我想要创建一个新记录,并且我想要验证该用户存在的changeset。我该怎么做 我的EXTO版本是1.1.8正确的方法是让数据库处理数据完整性。在应用程序中为此编写检查很容易出现竞争情况。如果在验证和插入注释之间删除了用户,该怎么办?如果删除了带有任何现有注

我有一个非常简单的
注释
模型:

  schema "comments" do
    field :content, :string
    belongs_to :user, MyApp.User
    timestamps
  end
我想要创建一个新记录,并且我想要验证该用户存在的
changeset
。我该怎么做


我的EXTO版本是
1.1.8

正确的方法是让数据库处理数据完整性。在应用程序中为此编写检查很容易出现竞争情况。如果在验证和插入
注释之间删除了
用户
,该怎么办?如果删除了带有任何现有注释的
用户
,该怎么办?在数据库中处理此操作将确保数据库中永远不会有无效数据

首先,确保
user\u id
字段设置为
references(:users)

然后,在您的
变更集
功能中,在管道连接到
cast
后,添加以下内容:

|> Ecto.Changeset.assoc_constraint(:user)

这将把数据库返回的与
user\u id
相关的错误转换为正常的变更集错误。您可以阅读更多关于
exto.Changeset.assoc\u constraint/3
。另请参见。

编写自定义变更集,并验证用户id是否有效?用户id可能存在,但也可能错误。数据库中没有id为的用户之类的东西是的,这就是我要找的。谢谢
|> Ecto.Changeset.assoc_constraint(:user)