2013-03-31 18 views
9

Próbuję napisać prostą animację Sinatry, ale potrzebuję ActionView :: Helpers :: NumberHelper z pakietu akcji. http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.htmlJak mogę wymagać aplikacji NumberHelper i sprawić, aby działała?

Pytanie brzmi: jak zainstalować i używać?

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 

Dlaczego ten prosty krok nie działa?

Ponadto, jeśli wymagają wszystko bzdura:

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 

Jak sensu z tym wszystkim? Dlaczego ten moduł nie działa? Dlaczego nie wymaga tego, czego potrzebuje? Czego potrzebuje? Gdzie jest starts_with?

Google milczy na te pytania.

UPD: I teraz pojawia się następujący

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

Wydaje mi się, że moja NumberHelper jest zepsuty. To nie jest dobre zachowanie.

Odpowiedz

18

Tak, po robi trochę badań, znalazłem następującą prośbę ciągnij branży mistrzowskiej Rails

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

to dość dużo cele do poruszania ActionView::Helpers::NumberHelper z ActionView do ActiveSupport

I również zobaczyłem kilka zamkniętych problemów, które miały na celu naprawienie kilku problemów z włączeniem włączenia NumberHelper jako samodzielnego. Oznacza to konieczność poprawek i tym podobne. Nie znalazłem otwartego problemu z number_to_phone, ale problem związany jest z faktem, że ActiveSupport dodaje alias starts_with? do klasy String. Nie jestem pewien, czy złapali tam jeszcze tego błędu, czy nie.

W każdym razie, z ActionView wersji 3.2.13 można wykonać następujące czynności

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

jak dla number_to_phone, że nadal będzie zerwać z aktualnej wersji. Robię PR, aby rozwiązać ten problem w tej chwili.

EDIT

chodzi o numerze locale, wydaje się, że jeśli podasz miejscowy trzeba się ustawić odpowiednie opcje w I18n go do pracy. Jeśli nie podasz lokalizacji, wartości domyślne będą wyglądać tak: {:separator=>".", :delimiter=>"", :precision=>3, :significant=>false, :strip_insignificant_zeros=>false}, w przeciwnym razie wartość mieszania będzie pusta i spowoduje problemy. Nie mogę jednak znaleźć żadnych problemów na temat Railsów.

Ponownie, została ustalona na PR na mistrza https://github.com/carlosantoniodasilva/rails/commit/f6b71499e967e03c65d53cc890585f42f3b8aaa2

UPDATE

Można użyć ActiveSupport teraz korzystać z tych pomocników

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

+0

To jest 'ActiveSupport :: NumberHelper' teraz: https://github.com/rails/rails/blob/master/activesupport/test/number_helper_test.rb – Dorian

+1

Tak, to było wspomniane w mojej oryginalnej odpowiedzi jako część PR, która powstał. Jednak ActionView nadal zawiera moduł 'NumberHelper' –

3

zmienił ostatnio:

require "active_support/all" 

module Helpers 
    extend ActiveSupport::NumberHelper 
end 

Helpers.number_to_currency(10.23) # => "$10.23" 
Powiązane problemy