изменяющемся ассоциацию данного child
от parent_a
к parent_b
через parent_id
в Params оставляет несвежий record.parent
объект.Ecto Reload belongs_to Ассоциация После успешного Repo.update
например. (Предположит, что соответствует PARAMS %{child: %{id: '1', parent_id: '6'}}
)
# ...
child = Repo.get(Child, child_id)
|> preload([:parent])
changeset = Child.changeset(child, child_params)
case Repo.update(changeset) do
{:ok, child} ->
IO.puts child.parent_id # returns '6', or the new, changed `id`
IO.puts child.parent.id # returns '5', or the old id
# child.parent is stale
# ...
Что такое правильный способ для получения нового ассоциированной родительской записи после обновления?
С помощью Ecto 2.0 вы можете передать команду 'force: true' в' Repo.preload', чтобы принудительно перезагрузить уже загруженную ассоциацию. Источник: https://hexdocs.pm/ecto/2.0.0-rc.1/Ecto.Repo.html#c:preload/3 –
@JonathanPerret стоит превратить ваш комментарий в ответ? В современных версиях Ecto это, по-видимому, идиоматический способ решения проблемы. –