我正在与Elixir和Phoenix合作开展项目,比如POS系统。 我有几个食物项目,我保存在我的数据库中
schema "foods" do
field :name, :string
field :price, :integer
belongs_to :category, Pos1.Category
has_many :order_items, Pos1.OrderItem
以及订单(用于保留订单)
schema "orders" do
field :number_of_customers, :integer
belongs_to :table, Pos1.Table
has_many :order_items, Pos1.OrderItem
和订单商品(用于保持订单商品链接到特定的order_id)
schema "order_items" do
field :quantity, :integer
belongs_to :order, Pos1.Order
belongs_to :food, Pos1.Food
我想制作一个页面,列出数据库中的所有食物。每个食物都应该有一个按钮,onclick将食物添加到order_item表中。
这是我到目前为止提出的(show.html):
<%= for food <- @foods do %>
<%= food.name %>
<%= render Pos1.OrderItemView, "form.html", changeset: @order_item_changeset, foods: @foods, action: order_order_item_path(@conn, :create, @order) %>
<% end %>
和表单(form.html)
<%= form_for @changeset, @action, fn f -> %>
<div class="form-group">
<%= label f, :food_id, class: "control-label" %>
<%= select f, :food_id, foods_to_select(@foods), class: "form-control" %>
<%= error_tag f, :food_id %>
</div>
<div class="form-group">
<%= label f, :quantity, class: "control-label" %>
<%= number_input f, :quantity, class: "form-control" %>
<%= error_tag f, :quantity %>
</div>
<div class="form-group">
<%= submit "Addfood", class: "btn btn-primary" %>
</div>
<% end %>
然而,我正在与food_id斗争。在上面的代码中,我仍然需要在变更集表格中选择食物和数量 like here ,但是可以根据我在show.html页面上的特定食物自动分配food_id(插入数据库)吗?所以,所有食物都只有数量选择。
例如,如果我有两种食物:可乐和百事可乐。在show.html上我会有两个盒子:一个用于可乐,一个用于百事可乐。每个方框都有数量输入,&#34;提交按钮&#34;。因此,如果我在焦炭盒和onclick中输入1,它将被插入到order_items表中。对百事可乐或任何其他食物而言,反之亦然。
提前致谢!
答案 0 :(得分:3)
您可以将food_id
传递给表单,然后在form.html.eex
中将@food_id
放入隐藏的输入标记中。您也无需将@foods
传递给form.html.eex
。
show.html.eex:
<%= for food <- @foods do %>
<%= food.name %>
<%= render Pos1.OrderItemView, "form.html", changeset: @order_item_changeset, action: order_order_item_path(@conn, :create, @order), food_id: food.id %>
<% end %>
form.html.eex:
<%= form_for @changeset, @action, fn f -> %>
<%= hidden_input f, :food_id, value: @food_id %>
<div class="form-group">
<%= label f, :quantity, class: "control-label" %>
<%= number_input f, :quantity, class: "form-control" %>
<%= error_tag f, :quantity %>
</div>
<div class="form-group">
<%= submit "Add food", class: "btn btn-primary" %>
</div>
<% end %>