我如何要求NumberHelper并使其工作?

我正在尝试编写一个简单的Sinatra,但我需要ActionBox中的ActionView :: Helpers :: NumberHelper。 http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html

问题是,我该如何安装和使用它?

irb(main):001:0> require 'action_view/helpers/number_helper' irb(main):002:0> number_with_precision(1) NoMethodError: undefined method `number_with_precision' for main:Object irb(main):004:0> ActionView::Helpers::NumberHelper.number_with_precision(1) NoMethodError: undefined method `number_with_precision' for ActionView::Helpers::NumberHelper:Module 

为什么这个简单的步骤不起作用?

而且,如果我需要所有废话:

 irb(main):001:0> require 'action_pack' irb(main):004:0> require 'action_view' irb(main):005:0> include ActionView::Helpers::NumberHelper irb(main):006:0> number_to_phone(12345) NoMethodError: undefined method `starts_with?' for "12345":String 

如何理解这一切? 为什么这个模块不起作用? 为什么它不需要它需要什么? 它需要什么? starts_with在哪里?

谷歌对这些问题完全保持沉默。

UPD:现在我得到以下内容

 number_with_precision(1, :locale => 'fr') TypeError: wrong argument type nil (expected Fixnum) 

在我看来,我的NumberHelper被打破了。 这不是一个好的行为。

因此,在做了一些研究之后,我在Rails的主分支上发现了以下pull请求

https://github.com/rails/rails/pull/6315

它几乎旨在将ActionView::Helpers::NumberHelperActionViewActiveSupport

我还看到了一些旨在解决一些问题的封闭问题,允许将NumberHelper作为独立包含在内。 这意味着需要修复等。 我没有找到number_to_phone的开放问题,但问题源于ActiveSupport添加了一个别名starts_with?String类。 我不确定他们是否已经在那里发现了那个bug。

无论如何,使用ActionView版本3.2.13您可以执行以下操作

 require 'action_view' include ActionView::Helpers::NumberHelper number_with_precision 3.1 #=> "3.100" 

至于number_to_phone ,它仍将与当前版本打破。 我正在制作一个公关来解决这个问题。

编辑

至于语言环境问题,似乎如果你指定一个本地,你需要在I18n设置正确的选项才能使它工作。 如果您不提供语言环境,则默认值将显示为{:separator=>".", :delimiter=>"", :precision=>3, :significant=>false, :strip_insignificant_zeros=>false} ,否则,哈希将为空,这将导致问题。 我似乎无法在Rails上找到任何有关它的问题。

再次,这是在主人的公关上修复的https://github.com/carlosantoniodasilva/rails/commit/f6b71499e967e03c65d53cc890585f42f3b8aaa2

UPDATE

您现在可以使用ActiveSupport来使用这些帮助程序

http://api.rubyonrails.org/classes/ActiveSupport/NumberHelper.html

它最近改变了:

 require "active_support/all" module Helpers extend ActiveSupport::NumberHelper end Helpers.number_to_currency(10.23) # => "$10.23"