ноль не может быть приведен в BigDecimal - PullRequest
1 голос
/ 21 февраля 2012

Привет, ребята, я играю с RoR в окружении рельсов. 3 ruby ​​1.9 я застрял в

ноль не может быть приведен в BigDecimal

ошибка

мне нужно получить общую стоимость продуктов внутри корзины я знаю, где проблема (я думаю), но я почти все сделал

корзина / show.html.rb

<div class="cart_title" >Your Cart</div>
    <table>
        <% for item in @cart.line_items %>
    <tr>
        <td><%= item.quantity %>&times;</td>
        <td><%= item.product.title %></td>
    <td class="item_price" ><%= number_to_currency(item.total_price) %></td>
    </tr>
    <% end %>
        <tr class="total_line" >
        <td colspan="2" >Total</td>
        <td class="total_cell" ><%= number_to_currency(@cart.total_price) %></td>
    </tr>
    </table>
        <%= button_to 'Empty cart', @cart, :method => :delete,
        :confirm => 'Are you sure?' %>

модель / line_item.rb

  def total_price
    line_items.to_a.sum { |item| item.total_price }
  end

модель / cart.rb

 def total_price
    product.price  * quantity
  end

мой второй вариант

def total_price
     if product.price 
       product.price * quantity
     else
       product.price = "0.0".to_d
     end
   end

но все равно это не сработает

спасибо больше силы нам!

1 Ответ

0 голосов
/ 21 февраля 2012

Проблема в вашей cart.rb модели:

def total_price
  product.price  * quantity
end

В вашей корзине нет ни одного товара; В вашей корзине много товаров. Вам нужно сложить все цены по всем позициям в вашей корзине. (Вы хотите использовать позиции, а не товары напрямую, в случае, если цены на товары изменятся после того, как клиент совершит покупку товаров по старой цене.)

Как вы это исправите, зависит от деталей ваших моделей, но вы будете искать что-то вроде этого:

def total_price
    line_items.to_a.each(&:total_price).sum
end

Это запустит метод total_price для каждого элемента в вашей коллекции line_items, создаст список их всех, а затем sum список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...