2010-03-15 9 views
45

मैं कुछ रूबी कोड, नहीं रेल लिख रहा हूँ, और मैं कुछ इस तरह संभाल करने की जरूरत है:वहाँ रूबी नहीं रेल में एक pluralize समारोह है?

found 1 match 
found 2 matches 

मैं रेल तो शायद मैं स्क्रिप्ट के शीर्ष पर एक require खंड जोड़ने के लिए सक्षम हो सकता है स्थापित किया है, लेकिन क्या किसी को एक रूबी विधि के बारे में पता है जो तारों को बहुलता है? क्या ऐसी कक्षा है जिसके लिए मुझे आवश्यकता हो सकती है जो स्क्रिप्ट रेल नहीं है, लेकिन मेरे पास रेल स्थापित है?

संपादित करें: इन सभी उत्तर करीब थे लेकिन मैं एक है कि यह मेरे लिए काम मिल गया की जांच कर ली।

def pluralize(number, text) 
    return text.pluralize if number != 1 
    text 
end 
+0

संपादित सही नहीं है। कोई रूबी फ़ंक्शन स्ट्रिंग # बहुवचन नहीं है, आपको अनुपलब्ध हैं 'active_support/inflector' या कुछ और चाहिए। – gorn

+0

अच्छी रेल हमेशा बदलती रहती है। मेरे प्रश्न को संपादित करने के लिए स्वतंत्र महसूस करें ताकि यह सही हो। मैं वर्तमान में रेल के साथ काम नहीं कर रहा हूं इसलिए मेरे पास इसका परीक्षण करने का समय नहीं है और यह देखने का सही तरीका क्या है। – DJTripleThreat

उत्तर

64

वास्तव में तुम सब करने की जरूरत है

है कैसे उपयोग करें: जब रूबी, नहीं रेल, कोड लिखने एक सहायक के रूप में इस विधि का प्रयास करें
require 'active_support/inflector' 

और कि स्ट्रिंग प्रकार का विस्तार होगा।

require 'rubygems' 
require 'active_support/inflector' 

मिलना चाहिए, अगर

कोशिश नहीं:

आप तो

"MyString".pluralize 

जो 2.3.5 कोशिश के लिए वापस आ जाएगी

"MyStrings" 

कर सकते हैं

sudo gem install activesupport 

और फिर की आवश्यकता है।

+0

ने ऐसा किया! धन्यवाद!! – DJTripleThreat

+0

2.3.5 sudo मणि के लिए स्थापित activesupport की आवश्यकता होती है 'rubygems' 'active_support/Inflector' की आवश्यकता होती है मिलना चाहिए यह मैं उपयोग कर रहा हूँ किनारे पटरियों (3) वहाँ decoupling का एक बहुत हो गया है, और यह प्रतीत होता है डिफ़ॉल्ट रूप से इसके साथ बंडल – scaney

+0

यह सक्रिय दृश्य के बहुवचन का मूल है, हालांकि ActiveView # pluralize यह भी जानता है कि इसे पहले पैरामीटर के आधार पर बहुवचन या एकवचन संस्करण का उपयोग कब करना चाहिए। –

1
require 'active_support' 
require 'active_support/inflector' 

inf = ActiveSupport::Inflector::Inflections.new 

Inflector प्राप्त करने के लिए, यकीन नहीं आप इसे

53

Inflector ज्यादातर स्थितियों के लिए overkill है।

def x(n, singular, plural=nil) 
    if n == 1 
     "1 #{singular}" 
    elsif plural 
     "#{n} #{plural}" 
    else 
     "#{n} #{singular}s" 
    end 
end 

रखें इस common.rb में, या जहाँ भी आप अपने सामान्य उपयोगिता कार्यों पसंद है और ...

require "common" 

puts x(0, 'result') # 0 results 
puts x(1, 'result') # 1 result 
puts x(2, 'result') # 2 results 

puts x(0, 'match', 'matches') # 0 matches 
puts x(1, 'match', 'matches') # 1 match 
puts x(2, 'match', 'matches') # 2 matches 
+0

यह वास्तव में एक अच्छा समाधान है। सरल और वास्तव में आपको बस आवश्यकता होगी। –

+0

यह वास्तव में काम करता है, वास्तव में महान समाधान। – Benoit

0

मुझे लगता है कि के लिए एक सहायक समारोह में परिभाषित किया गया है, मैं संपादन योग्य प्रत्येक उपयोगकर्ता के लिए इसका इस्तेमाल करते हैं मॉडल के सूचकांक दृश्य:

def ovyka_counter(array, name=nil, plural=nil) 
    name ||= array.first.class.human_name.downcase 
    pluralize(array.count, name, plural) 
    end 

तो आप इसे देखने से कॉल कर सकते हैं:

<% ovyka_counter @posts %> 

अंतर्राष्ट्रीयकरण (i18n) के लिए, तो आप अपने स्थान YAML फ़ाइलों को यह जोड़ सकते हैं:

activerecord: 
    models: 
     post: "Conversation" 
10

मैं व्यक्तिगत रूप से linguistics gem कि निश्चित रूप से संबंधित रेल नहीं है की तरह।

# from it's frontpage 
require 'linguistics' 

Linguistics.use :en 

"box".en.plural #=> "boxes" 
"mouse".en.plural #=> "mice" 
# etc 
+6

मैंने '" बॉक्स ".en' पढ़ा और सोचा" बॉक्सन "! –

0

मेरी समाधान:

# Custom pluralize - will return text without the number as the default pluralize. 
def cpluralize(number, text) 
    return text.pluralize if number != 1 
    return text.singularize if number == 1 
end 

तो तुम 'समीक्षा' हो सकता है वापस आ अगर आप cpluralize फोन (1, 'समीक्षा करता है')

आशा है कि मदद करता है।

2

यह मैं हूँ (रूबी 2.1.1 और actionpack 3.2.17 का उपयोग करके) के लिए काम करता है:

~$ irb 
>> require 'action_view' 
=> true 
>> include ActionView::Helpers::TextHelper 
=> Object 
>> pluralize(1, 'cat') 
=> "1 cat" 
>> pluralize(2, 'cat') 
=> "2 cats" 
संबंधित मुद्दे