2013-03-31 8 views
9

मैं एक साधारण सिनात्रा चीज़ लिखने की कोशिश कर रहा हूं लेकिन मुझे एक्शन व्यू :: हेल्पर्स :: नंबरहेल्पर एक्शन पैक से चाहिए। 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 

कैसे समझ में यह सब से बनाने के लिए? यह मॉड्यूल क्यों काम नहीं करता है? इसकी आवश्यकता के लिए इसकी आवश्यकता क्यों नहीं है? इसकी क्या ज़रूरत है? Start_with कहां है?

Google उन प्रश्नों पर पूरी तरह से चुप है।

युपीडी: और अब मैं निम्नलिखित मिल

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

मुझे ऐसा लगता है कि मेरे NumberHelper टूटी हुई है। यह एक अच्छा व्यवहार नहीं है।

उत्तर

18

तो, अनुसंधान के एक बिट करने के बाद, मैं रेल के मालिक शाखा पर निम्नलिखित पुल अनुरोध पाया

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

यह काफी उद्देश्य से ActionViewActiveSupport

को मैं ActionView::Helpers::NumberHelper स्थानांतरित करने के लिए कुछ बंद मुद्दों को भी देखा जो कुछ समस्याओं को ठीक करने के उद्देश्य से NumberHelper को स्टैंडअलोन के रूप में शामिल करने की अनुमति दे रहे थे। इसका मतलब है फिक्स और ऐसे की आवश्यकता है। मुझे number_to_phone के साथ एक खुली समस्या नहीं मिली लेकिन समस्या यह है कि ActiveSupportString कक्षा में उपनाम starts_with? जोड़ता है। मुझे यकीन नहीं है कि उन्होंने अभी तक उस बग को पकड़ा है या नहीं।

किसी भी मामले में, 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} की तरह दिखेगा, अन्यथा, हैश खाली होगा और इससे समस्याएं पैदा होंगी। हालांकि मुझे रेल पर इसके बारे में कोई समस्या नहीं दिख रही है।

फिर, यह मास्टर पर एक पीआर पर तय किया गया था https://github.com/carlosantoniodasilva/rails/commit/f6b71499e967e03c65d53cc890585f42f3b8aaa2

अद्यतन

अब आप ActiveSupport उपयोग कर सकते हैं इन सहायकों

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

+0

यह अब 'ActiveSupport :: NumberHelper' है: https://github.com/rails/rails/blob/master/activesupport/test/number_helper_test.rb – Dorian

+1

हाँ, पीआर के हिस्से के रूप में मेरे मूल उत्तर पर इसका उल्लेख किया गया था कि बनाया गया था। हालांकि, एक्शन व्यू में अभी भी 'नंबरहेल्पर' मॉड्यूल शामिल है –

3

यह हाल ही में बदल उपयोग करने के लिए:

require "active_support/all" 

module Helpers 
    extend ActiveSupport::NumberHelper 
end 

Helpers.number_to_currency(10.23) # => "$10.23" 
संबंधित मुद्दे