2016-12-13 3 views
0

У меня есть таблица для таблиц и заказов. Связь между порядком и таблицей заключается в том, что 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 
+0

Какая строка из приведенного выше строки 18? Или это весь дескриптор в функции? Если это так, возможно, это связано с тем, что он путается с переменной «changeet». Возможно, попробуйте изменить его как 'order_changeset', а не просто' order'. –

+0

строка 18 является '|> Pos1.Order.changeset (: table_id)' .. –

+0

hmm thats odd. Можете ли вы добавить свою модель заказа или, по крайней мере, набор изменений заказа? –

ответ

0

Эта ошибка вызвана @required_fields из Orders модели.

Я не пропустил ни одного @required_fields, чтобы он не создал заказ.

Я переместил @required_fields в @optional_fields, и это сработало.

Смежные вопросы