У меня есть таблица для таблиц и заказов. Связь между порядком и таблицей заключается в том, что Order
принадлежит к таблице, а таблица имеет много заказов. Таким образом, в одной из столбцов таблицы заказов есть table_id
. А также таблица имеет столбец current_order
, чтобы сохранить текущий order_id
, который имеет в настоящее время таблица.Через handle_in в канале для вставки данных в базу данных
У меня есть канал table:show
, который показывает все списки таблиц. И когда пользователь нажимает на таблицу, он толкает table:busy
и отправляет table_id
щелкнутой таблицы.
Итак, в канале таблицы есть handle_in для table:busy
, и я хочу создать заказ с table_id
, который отправил из table:show
канал.
def handle_in("table:busy", %{"table_id" => table_id}, socket) do
table = Repo.get(Pos1.Table, table_id)
changeset = table
|> assoc(:orders)
|> Pos1.Order.changeset(:table_id)
case Repo.insert(changeset) do
{:ok, order}->
changesettable = Table.changeset(table, %{current_order: order.id})
table = Repo.update!(changesettable)
{:noreply, socket}
{:error, changeset} ->
{:reply, {:error, %{error: "Error creating order"}}, socket}
end
end
Это сообщение об ошибке:
---[error] GenServer #PID<0.1327.0> terminating
** (UndefinedFunctionError) function Ecto.Query.__changeset__/0 is undefined or private
(ecto) Ecto.Query.__changeset__()
(ecto) Ecto.Changeset.do_cast/4
(pos1) web/channels/table_channel.ex:18: Pos1.TableChannel.handle_in/3
(phoenix) lib/phoenix/channel/server.ex:225: anonymous fn/4 in Phoenix.Channel.Server.handle_info/2
Выше ошибка показывает, что набор изменений не определен ... Как я могу определить набор изменений для вставки данных в таблицу Orders
?
Заранее спасибо ..
--- EDIT 1
defmodule Pos1.Order do
use Pos1.Web, :model
schema "orders" do
field :number_of_customers, :integer
field :completed, :boolean, default: false
field :confirmed, :boolean, default: false
field :service_charge, :boolean, default: true
field :total, :integer, default: 0
field :discount, :float, default: 0.0
field :current_select, :integer, default: 1
field :payed, :float
field :finalized, :boolean, default: false
field :served, :boolean, default: false
field :current_round, :integer, default: 0
field :rounds, :integer, default: 1
field :created_date, Ecto.DateTime
belongs_to :table, Pos1.Table
belongs_to :payment, Pos1.Payment
has_many :order_items, Pos1.OrderItem
belongs_to :staff, Pos1.Staff
timestamps
end
@required_fields ~w(number_of_customers table_id completed confirmed
total service_charge current_select finalized served
rounds current_round)
@optional_fields ~w(payment_id discount staff_id payed created_date)
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
end
Какая строка из приведенного выше строки 18? Или это весь дескриптор в функции? Если это так, возможно, это связано с тем, что он путается с переменной «changeet». Возможно, попробуйте изменить его как 'order_changeset', а не просто' order'. –
строка 18 является '|> Pos1.Order.changeset (: table_id)' .. –
hmm thats odd. Можете ли вы добавить свою модель заказа или, по крайней мере, набор изменений заказа? –