我想写一个简单的Sinatra的东西,但我需要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在哪里?
Google对这些问题完全保持沉默。
UPD:现在我得到以下
number_with_precision(1, :locale => 'fr')
TypeError: wrong argument type nil (expected Fixnum)
在我看来,我的NumberHelper坏了。
因此,在做了一些研究之后,我在Rails的主分支上发现了以下拉请求
https://github.com/rails/rails/pull/6315它的基本目标是将ActionView::Helpers::NumberHelper
从ActionView
移动到ActiveSupport
我还看到了一些封闭的问题,旨在解决允许单独包含NumberHelper
的一些问题。这意味着需要修复等等。我没有发现number_to_phone
的开放问题,但问题的根源在于ActiveSupport
向String
类添加别名starts_with?
。我不确定他们是否已经抓住了那个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的问题。
同样,这是固定在主上的PR https://github.com/carlosantoniodasilva/rails/commit/f6b71499e967e03c65d53cc890585f42f3b8aaa2
您现在可以使用ActiveSupport
来使用这些帮助
最近改变了:
require "active_support/all"
module Helpers
extend ActiveSupport::NumberHelper
end
Helpers.number_to_currency(10.23) # => "$10.23"