使用put_assoc和一组id更新many_to_many

时间:2017-09-14 22:54:53

标签: elixir ecto

我有一个简单的架构产品,其中包含many_to_many:tags关系,没有连接表的中间架构。

many_to_many :tags, Tag, join_through: "products_tags"

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

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

如果我不想预加载它们,就像在ActiveRecord中完成的那样?

1 个答案:

答案 0 :(得分:1)

  

如果我不想预加载它们,就像在ActiveRecord中完成的那样?

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

  

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

如果你想在没有预加载的情况下这样做,我想你只需要自己编写查询。