我有一个数据模型,其中用户可以拥有视频以及属性,类似于:
我希望能够将多个视频发布到媒体资源。目前,我使用put_assoc,并具有类似于以下代码:
def publish_videos_to_property(user, property, video_ids) when is_list(video_ids) do
videos =
Video
|> where([video], video.id in ^video_ids and video.user_id == ^user.id)
|> Repo.all()
with {:ok, _struct} <-
property
|> Property.changeset_update_videos(videos)
|> Repo.update() do
{:ok, Properties.get_property(user, property.id)}
else
error -> error
end
end
并按如下所示使用put_assoc:
def changeset_update_videos(property, videos) do
property
|> cast(%{}, @required_fields ++ @optional_fields)
|> put_assoc(:videos, videos)
end
这可以正常工作,但是如果已经存在关系将被删除,这是不受欢迎的行为。
我可以:
对这种行为进行编码的最佳方法是什么?有没有更富有表现力的方式可以做到这一点?