Ruby Rails 4:为什么类中包含的助手是继承的,而类的实例方法不是继承的
我在models/item.rb(其中someAmt是item的一个属性)中定义了一个实例方法,如下所示:Ruby Rails 4:为什么类中包含的助手是继承的,而类的实例方法不是继承的,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我在models/item.rb(其中someAmt是item的一个属性)中定义了一个实例方法,如下所示: include ActionView::Helpers::NumberHelper 类项
include ActionView::Helpers::NumberHelper
类项2)}”
终止
终止
并尝试像这样使用index.html.erb中的方法(因为该方法是实例方法,所以不起作用):
但是,我可以使用模型项中包含的编号\u到\u货币帮助器:
<tr>
<td class="item_total">
<%= @items.number_to_currency(BigDecimal(@items.sum(&:someAmt))/100, precision: 2) %>
</td>
</tr>
这是因为号码LPER已自动包含在内,还是原因 这里有很多错误。首先,在类之外执行
include
方法。这将导致模块包含在对象
类中,从而使应用程序中几乎每个对象上的所有方法都可用。这就是为什么您可以使用@items.number\u到\u currency
。您还可以使用nil.number\u to\u currency
,15.5.number\u to\u currency
,false.number\u to\u currency
。这是错误的
现在,即使你把它移到类中,它仍然不起作用@items
是ActiveRecord::Relations
(很可能)的实例或项目集合。您的方法是实例方法,只能对单个项调用
也就是说,这个方法甚至不应该是项目的实例方法,因为这打破了MVC模式。此方法的唯一目的是以美元显示给定值,这是典型的视图关注点。它甚至不使用任何模型属性。它应该放在helpers中。你真的在你的类定义之外有include吗?为什么
@items
(复数)?它是一个单一的项目
实例还是一个集合?@BroiSatse我在某个地方找到了它。@thaleshcv是的,它是一个集合?
<tr>
<td class="item_total">
<%= @items.displayInDollar(BigDecimal(@items.sum(&:someAmt))/100, precision: 2) %>
</td>
</tr>
<tr>
<td class="item_total">
<%= @items.number_to_currency(BigDecimal(@items.sum(&:someAmt))/100, precision: 2) %>
</td>
</tr>