2016-12-13 6 views
0

テーブルとオーダーのテーブルがあります。順序と表の関係は、Orderが表に属しており、表に多数の注文があることです。したがって、注文表の列の1つにtable_idがあります。また、テーブルに現在order_idを保持するcurrent_orderのカラムがあります。データベースにデータを挿入するチャネルのhandle_inを通して

私はtable:showチャンネルを持っています。これはすべてのテーブルのリストを示しています。ユーザーがテーブルをクリックすると、table:busyがプッシュされ、クリックされたテーブルのtable_idが送信されます。

したがって、table:busyのhandle_inがあり、table:showチャンネルから送信されたtable_idの注文を作成したいとします。エラー上記

---[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テーブルにデータを挿入するチェンジセットを定義することができます...:

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 

これは、エラーメッセージはありますか?事前に

おかげ..

--- 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行目はどれですか?それとも、ハンドル全体が機能しているのでしょうか?そうであれば、 'changeset'変数と混同している可能性があります。おそらく 'order'ではなく' order_changeset'に変更してみてください。 –

+0

18行目は '|> Pos1.Order.changeset(:table_id)' .. –

+0

hmm thats oddです。あなたはあなたの注文モデルまたは少なくとも注文変更セットを追加することができますか? –

答えて

0

このエラーはOrdersモデルの@required_fieldsによって引き起こされます。

私はすべて@required_fieldsを渡さなかったので、注文を作成しませんでした。

@required_fields@optional_fieldsに移動しました。

関連する問題