将方法得出的属性的和函数中的nil视为零(Rails 4.2)

时间:2018-11-08 07:02:44

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord methods

我有一个表格,该表格从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)) %>

1 个答案:

答案 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?默认为零)