Elixir / Phoenix变更集自动分配一个字段

时间:2016-05-18 08:27:47

标签: elixir phoenix-framework elixir-framework

我正在与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表中。对百事可乐或任何其他食物而言,反之亦然。

提前致谢!

1 个答案:

答案 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 %>