【问题标题】:Updating many_to_many with put_assoc and an array of ids使用 put_assoc 和一组 id 更新 many_to_many
【发布时间】:2017-09-15 09:17:27
【问题描述】:

我有一个简单的架构 Product 与 many_to_many :tags 关系没有连接表的中间架构。

many_to_many :tags, Tag, join_through: "products_tags"

现在问题很简单,在 Ruby 的 ActiveRecord 中,有一个方便的设置器,您可以在其中设置关联记录的 ID 数组,它会自动更新连接记录,即:product.tag_ids = [1, 2, 5, 6]

在 Ecto 中,如果我想使用 put_assoc,似乎需要我预先加载数组中的所有标签,所以我可以 perform put_assoc(:tags, tags)...

如果我不想像在 ActiveRecord 中那样预加载它们怎么办?

【问题讨论】:

    标签: elixir ecto


    【解决方案1】:

    如果我不想像在 ActiveRecord 中那样预加载它们怎么办?

    Ecto.Changeset.put_assoc文档(摘录):

    更新数据时,此函数要求关联已预加载到变更集结构中。缺少数据将调用关联上定义的:on_replace 行为。 新建结构不需要预加载。

    如果您想在不预加载的情况下执行此操作,我认为您只需要自己编写查询即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 2022-08-08
      相关资源
      最近更新 更多