2013-03-31 17 views
9

Sto provando a scrivere un semplice cosy di Sinatra, ma ho bisogno di ActionView :: Helpers :: NumberHelper del pacchetto di azioni. http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.htmlCome richiedere NumberHelper e farlo funzionare?

La domanda è, come installarlo e utilizzarlo?

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 

Perché questo semplice passaggio non funziona?

Inoltre, se ho bisogno di tutte le stronzate:

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 

come dare un senso da tutto questo? Perché questo modulo non funziona? Perché non richiede ciò di cui ha bisogno? Di cosa ha bisogno? Dov'è starts_with?

Google è assolutamente silenzioso su quelle domande.

UPD: E ora ottengo il seguente

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

mi sembra che la mia NumberHelper è rotto. Questo non è un buon comportamento.

risposta

18

Così, dopo aver fatto un po 'di ricerca, ho trovato la seguente richiesta di pull sul ramo maestro di Rails

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

E' praticamente mira a spostare ActionView::Helpers::NumberHelper da ActionView a ActiveSupport

I Ho visto anche alcuni problemi chiusi che miravano a risolvere alcuni problemi consentendo l'inclusione di NumberHelper come autonomo. Ciò significa richiedere correzioni e così via. Non ho trovato un problema aperto con lo number_to_phone ma il problema affonda sul fatto che lo ActiveSupport aggiunge un aliasalla classe String. Non sono sicuro se hanno colto quel bug ancora o no.

In ogni caso, con la versione ActionView3.2.13 è possibile effettuare le seguenti operazioni

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

Per quanto riguarda il number_to_phone, che comunque rompere con la versione corrente. Sto facendo un PR per risolvere quel problema in questo momento.

EDIT

quanto riguarda la questione locale, sembra che se si specifica un locale, è necessario aver impostato le opzioni giuste nel I18n per farlo funzionare. Se non fornisci un locale, i valori predefiniti saranno simili a questo {:separator=>".", :delimiter=>"", :precision=>3, :significant=>false, :strip_insignificant_zeros=>false}, altrimenti l'hash sarà vuoto e causerà problemi. Però non riesco a trovare alcun problema a riguardo su Rails.

Ancora una volta, questo è stato fissato su un PR sul maestro https://github.com/carlosantoniodasilva/rails/commit/f6b71499e967e03c65d53cc890585f42f3b8aaa2

UPDATE

È possibile utilizzare ActiveSupport ora di utilizzare questi aiutanti

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

+0

È 'ActiveSupport :: NumberHelper' ora: https://github.com/rails/rails/blob/master/activesupport/test/number_helper_test.rb – Dorian

+1

Sì, questo è stato menzionato nella mia risposta originale come parte di un PR che è stata creata. Tuttavia, ActionView contiene ancora il modulo 'NumberHelper' –

3

ha cambiato di recente:

require "active_support/all" 

module Helpers 
    extend ActiveSupport::NumberHelper 
end 

Helpers.number_to_currency(10.23) # => "$10.23" 
Problemi correlati