我試圖將我的應用程序從phoenix 1.2更新到1.3。Phoenix 1.3使用通道插入數據
在我的頻道中,handle_in
功能之一得到order_id
和food_id
創建OrderItem
changeset = order
|> build_assoc(:order_items)
|> Myapp.OrderItem.changeset(%{food_id: food.id,
price: food.price,
quantity: 1,
order_id: order.id,
created_date: time_now})
case Repo.insert(changeset) do
{:ok, order_item} ->
max_rounds = Repo.one!(from p in Myapp.OrderItem, where: p.order_id == ^order.id, select: max(p.round))
Myapp.Order.changeset(order, %{total: order.total + (order_item.price * order_item.quantity), rounds: max_rounds}) |> Repo.insert_or_update
end
所以上面的代碼是從鳳凰1.2版應用程序,它的作用是,當用戶成功創建order_item
,它更新order
。它工作正常。
with {:ok, %OrderItem{} = order_item} <- Myapp.create_order_item(%{food_id: food.id,
price: food.price,
order_id: order.id,
created_date: time_now}) do
max_rounds = Repo.one!(from p in OrderItem, where: p.restaurant_order_id == ^order.id, select: max(p.round))
Myapp.update_order(order, %{total: order.total + (order_item.price * order_item.quantity), rounds: max_rounds})
end
鳳凰1.3引入了新的使用model
,所以我稱之爲create_order_item
功能從Myapp
具有Myapp.Order
和Myapp.OrderItem
創建order_item
。
def create_order_item(attrs \\ %{}) do
%OrderItem{}
|> order_item_changeset(attrs)
|> Repo.insert()
end
儘管我傳遞了所有需要插入到數據庫的字段,但它並沒有插入數據庫。我應該如何解決它?我在這裏做錯了什麼?
在此先感謝。
---編輯
def create_order_item(attrs \\ %{}) do
time_now = Ecto.DateTime.cast!
(:calendar.universal_time_to_local_time(:calendar.universal_time()))
%OrderItem{created_date: time_now}
|> order_item_changeset(attrs)
|> Repo.insert()
end
您是否在日誌中看到錯誤?還是整個代碼運行沒有錯誤,但沒有插入? – Dogbert
它不會觸發任何錯誤,也不會插入任何內容。如果我刪除'create_order_item'函數中的'|> order_item_changeset(attrs)',它將僅插入默認字段值。 –
create_order_item'返回什麼?嘗試'IO.inspect(Myapp.create_order_item(...))'。它必須返回一些錯誤。 – Dogbert