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)