Я рассчитываю значение ROI, которое в среднем по категории.
<% @categories.each do |category| %>
<h3><strong><%= category.name %><strong></h3>
<% @category_products = category.products_by_warehouse_id(params[:id]) %>
<!-- add map/reject below -->
<%@ROI = (@category_products.reduce(0.0) {|acc, item| acc + (item.heritable_sale_price.to_f * item.product_selections.length) / item.purchase_price.to_f }) %>
<p> Category ROI: <%= number_with_precision((@ROI / @category_products.length.to_f), precision:2) %></p>
.....(close tags)......
Значение выдает NaN
, если финансовые данные отсутствуют.Для отдельных значений это хорошо;однако, он делает то же самое для средних значений с отсутствующими данными.
Как я могу добавить map
/ reject
в мой вызов, чтобы выбросить nil
значений и получить среднее из того, что доступно?
@category_products.length.to_f
также пришлось бы пропускать пустые элементы в массиве, если я тоже пойду по этому пути, чтобы сумма и длина были согласованными.Может работать что-то вроде .where(purchase_price: [!nil, ""]).size
.