我在models / item.rb中定义了一个实例方法(其中someAmt是Item的一个属性),如下所示:
include ActionView::Helpers::NumberHelper
class Item < ActiveResource::Base
self.site = "http://localhost:8080/xxxx/"
def displayInDollar(num)
return "$#{number_with_precision(BigDecimal(num)/100,
:precision => 2)}"
end
end
并尝试使用index.html.erb中的方法(这不起作用,因为该方法是一个实例方法):
<tr>
<td class="item_total">
<%= @items.displayInDollar(BigDecimal(@items.sum(&:someAmt))/100, precision: 2) %>
</td>
</tr>
但是我可以使用我在模型项中包含的number_to_currency帮助器:
<tr>
<td class="item_total">
<%= @items.number_to_currency(BigDecimal(@items.sum(&:someAmt))/100, precision: 2) %>
</td>
</tr>
这是因为NumberHelper已被自动包含,或者为什么?
答案 0 :(得分:0)
这里有很多错误。首先,在类之外执行include
方法。这将导致模块包含在Object
类中,因此将使应用程序中的每个对象都可以使用所有方法。这就是您可以使用@items.number_to_currency
的原因。您还可以使用nil.number_to_currency
,15.5.number_to_currency
,false.number_to_currency
。这是错的。
现在,即使你在课堂内移动它,它仍然无效。 @items
是ActiveRecord::Relations
(最有可能)的一个实例或项目集合。您的方法是一个实例方法,只能在单个项目上调用。
话虽这么说,这个方法甚至不应该是你的Item的实例方法,因为这会打破MVC模式。此方法的唯一目的是以美元显示给定值,这是典型的视图关注点。它甚至不使用任何模型属性。它应放在帮助者中。