我有一个表格,该表格从Product模型中以number_to_currency(product.heritable_rental_price.to_f * product.quantity.to_f)
的形式列出产品的租金价格,其中百分比是从默认值以及该产品可用的工作价值得出的:
def heritable_rental_price
if rental_price.present?
return rental_price
elsif working_value.present?
return (working_value || 0.0) * heritable_rental_price_percentage / 100
else
return nil
end
end
我使用Treating nil as zero in sum function作为解决此问题的模型。
def rental_price_sum
self.map(&:heritable_rental_price).compact.sum
end
以下是它在视图中的显示方式:
<tr>
<td>
<% if product.heritable_rental_price.present? %>
<%= number_to_currency(product.heritable_rental_price.to_f * product.quantity.to_f) %>
<% else %>
---
<%end%>
</td>
<td>
</tr>
<tr>
<td>
<% if product.heritable_rental_price.present? %>
<%= number_to_currency((product.rental_price_sum.to_f * product.quantity.to_f).reduce(0, :+)) %>
<% else %>
---
<%end%>
</td>
</tr>
对于我也尝试过的事情,我可以通过在末尾添加.sum [:working_value]来获得预定义:working_value
的和,但是,到目前为止(由于它是在模型中定义的,因此我无法通过Sym
将其拉出)
Total Working Value: <%=number_to_currency(category.products_by_warehouse_id(params[:id]).sum(:working_value)) %>
答案 0 :(得分:0)
首先我要指出:
mv example.mat example.txt
如果elsif working_value.present?
return (working_value || 0.0) * heritable_rental_price_percentage / 100
working_value.present?
不能为working_value
,那么nil
将永远无法运行。
如果确实如此,则零乘以除以零仍为零。
所以
|| 0.0
但是,我认为主要的问题是您假设def heritable_rental_price
return rental_price if rental_price.present?
return 0 unless working_value.present?
working_value * heritable_rental_price_percentage / 100
end
返回0.present?
,而实际上却返回false
。我认为您要的支票是true
unless product.heritable_rental_price.nil?
也应为return rental_price if rental_price.present?
(如果return rental_price unless rental_price.nil?
默认为零)