首页 > 解决方案 > 计算视图中的总价

问题描述

我是 elixir 的新手,我想做的是计算用户购物车中物品的总价格并将其显示在购物车页面中。我写了一个函数,它是我在互联网上找到的函数的混合体。我将不胜感激任何帮助!

这是我的购物车 index.html.eex

    <h1>Your Cart</h1>
    <%= if @books do %>
      <ul>
        <%= for book <- @books do %>
          <li>
            <%= book.title %>: £<%= book.original_price %>
            <%= link "X", to: Routes.cart_path(@conn, :delete, book_slug: book.slug), method: :delete %>
          </li>
        <% end %>
      </ul>
    <% else %>
      <p>No books in your cart</p>
    <% end %>
<%= total_price(@books) %>

还有cart_view

  def total_price(books) do
    shipping = 5.99

    price_with_shipping =
      Enum.reduce(books, fn book, acc ->
        %{total_amount: book.original_price + acc.total_amount + shipping}
      end)
      |> Map.get(:total_amount)

    text = "Total amount: #{price_with_shipping}"
  end

最后,它只显示这部分 - “总金额:”,没有计算出的运费价格。

标签: elixirphoenix-framework

解决方案


  1. 如果您可以在视图中看到“总金额:”部分,则视图很好。
  2. <%= total_price(@books) %>应该是inside if子句。
  3. 你想计算一个总数,它是一个数字,而不是一张地图。所以减少数量。

也就是说,下面应该工作。

def total_price(books) do
  shipping = 5.99

  price_with_shipping =
    Enum.reduce(books, 0, fn %{original_price: price}, acc ->
      price + acc + shipping
    end)

  "Total amount: #{price_with_shipping}"
end

推荐阅读