Ecto put_assoc changeset правильный, но Repo.update дает исключение StaleEntryError - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь обновить некоторые данные в таблице mysql.Я использую Ecto для выполнения операций с базой данных.

Таблица пользователей имеет связь с ItemsPurchased, has_many и belongs_to, как показано ниже:

schema "sales_orders" do
    field(:total_bill, :float)
    field(:quantity, :integer)

    field :sales_order_id, :integer
    has_many :items_purchased, Orders.ItemsPurchased, on_replace: :delete
    timestamps()
end


 schema "items_purchased" do
    field :item_id, :string
    field :product, :string
    field :description, :string
    field :picture, :string
    field :quantity, :integer
    field :required_total_bill, :decimal

    belongs_to(:sales_order, Orders.SalesOrder)

    timestamps()
  end

  schema "sales_orders" do
    field(:quantity, :integer)
    field(:so_date, :utc_datetime)

    field :sales_order_id, :integer
    has_many :sales_order_line_items, 
    Orders.SalesOrderLineItem, on_replace: :delete
    timestamps()
  end

Проблемаздесь, когда я пытаюсь обновить items_purchased, ecto changeset вставляет пустые данные.Ниже приведен набор изменений:

Ecto.Changeset.put_assoc(inserted_so, :items_purchased, items_purchased)          
#Ecto.Changeset<
  action: nil,
  changes: %{
    total_bill: 300.0,
    items_purchased: [
      #Ecto.Changeset<action: :replace, changes: %{}, errors: [],
       data: #Orders.ItemsPurchased<>, valid?: true>,
      #Ecto.Changeset<
        action: :insert,
        changes: %{
          "description" => "white",
          "item_id" => "88-1",
          "product" => "tee",
          "quantity" => 50, 
          "required_total_bill" => "500"
        },
        errors: [],
        data: #Orders.ItemsPurchased<>,
        valid?: true
      >
    ]
  },
  errors: [],
  data: #Orders.SalesOrder<>,
  valid?: true
>

Вывод Repo.update с put_assoc:

** (Ecto.StaleEntryError) attempted to delete a stale struct:

Может кто-нибудь дать мне знать, что с этим не так?

Спасибо, S

...