【问题标题】:Elixir/Phoenix changeset auto assignment of one fieldElixir/Phoenix 变更集自动分配一个字段
【发布时间】:2016-09-14 14:47:41
【问题描述】:

我正在与 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

我想创建一个页面,列出数据库中的所有食物。这些食物中的每一种都应该有一个按钮,单击该按钮会将食物添加到 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(插入到 db 中)?所以,所有的食物都会有数量选择。

例如,如果我有两种食物:可乐和百事可乐。在 show.html 上,我有两个盒子:一个是可乐的,一个是百事可乐的。每个盒子都会有数量输入,和“提交按钮”。因此,如果我在可乐框中输入 1 并单击,它将被插入到 order_items 表中。对于百事可乐或任何其他食物,反之亦然。

提前致谢!

【问题讨论】:

    标签: phoenix-framework elixir


    【解决方案1】:

    您可以将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 %>
    

    【讨论】:

    • 刚刚试了,效果很好。 hidden_​​input 这就是我要找的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多