2010-03-15 5 views
45

Ich schreibe einige Code Ruby nicht Rails, und ich brauche so etwas wie das zu handhaben:Gibt es eine Pluralfunktion in Ruby NOT Rails?

found 1 match 
found 2 matches 

ich Rails so vielleicht installiert habe ich vielleicht eine require Klausel am Anfang des Skripts hinzufügen können, aber kennt jemand eine RUBY-Methode, die Strings pluraliert? Gibt es eine Klasse, die ich benötigen kann, die damit umgehen kann, wenn das Skript nicht Rails ist, aber ich Rails installiert habe?

Bearbeiten: Alle diese Antworten waren in der Nähe, aber ich checked die eine, die es funktioniert für mich. Versuchen Sie, diese Methode als Helfer bei der Ruby-Schreiben, nicht Rails, Code:

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

Das Bearbeiten ist nicht korrekt. Es gibt keine Ruby-Funktion String # pluralize, Sie fehlen 'active_support/inflector' oder etwas anderes. – gorn

+0

Well Rails verändert sich ständig. Fühlen Sie sich frei, meine Frage so zu redigieren, dass sie richtig ist. Ich arbeite derzeit nicht mit Schienen, also habe ich nicht die Zeit, dies zu testen und zu sehen, was der richtige Weg ist, dies jetzt zu tun. – DJTripleThreat

Antwort

64

alles, was Sie eigentlich tun müssen, ist

require 'active_support/inflector' 

und das wird den String-Typ erweitern.

können Sie dann tun

"MyString".pluralize 

die

"MyStrings" 

für 2.3.5 Versuch zurück:

require 'rubygems' 
require 'active_support/inflector' 

sollte es bekommen, wenn nicht

versuchen
sudo gem install activesupport 

und dann die erfordert.

+0

das hat es geschafft! Vielen Dank!! – DJTripleThreat

+0

für 2.3.5 sudo gem install Active ‚rubygems‘ erfordern ‚active_support/Inflector‘ erfordern sollte es bekomme ich bin mit Kantenschienen (3) gibt es eine Menge Entkopplung gewesen ist, und es scheint Standardmäßig mit ihm bündeln – scaney

+0

Dies ist der Kern von ActiveViews Plural, aber ActiveView # Pluralize weiß auch, wann es die Plural- oder Singular-Version basierend auf dem ersten Parameter verwenden sollte. –

1
require 'active_support' 
require 'active_support/inflector' 

inf = ActiveSupport::Inflector::Inflections.new 

den Inflector zu bekommen, nicht sicher, wie Sie es verwenden

53

Der Reflektor ist für die meisten Situationen übertrieben.

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

Dieses in common.rb, oder wo auch immer Sie Ihre allgemeinen Utility-Funktionen wie und ...

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

Dies ist eine wirklich großartige Lösung. Einfach und wirklich alles was du brauchst. –

+0

Das macht den Job perfekt, großartige Lösung in der Tat. – Benoit

0

ich eine Hilfsfunktion für das definiert haben, ich benutze es für jeden Benutzer editierbar Indexansicht des Modells:

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

dann können Sie es aus der Sicht nennen:

<% ovyka_counter @posts %> 

für die Internationalisierung (i18n), können Sie dann fügen Sie diese zu Ihrer locale YAML-Dateien:

activerecord: 
    models: 
     post: "Conversation" 
10

Ich persönlich mag die linguistics gem, die definitiv nicht Schienen verwandt ist.

# from it's frontpage 
require 'linguistics' 

Linguistics.use :en 

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

Ich lese "box" .en' und dachte "boxen"! –

0

meine Lösung:

# 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 

So können Sie haben 'Überprüfung' zurückgegeben, wenn Sie cpluralize nennen (1, 'Bewertungen')

Hoffnung, das hilft. Diese

2

funktioniert für mich (mit Ruby 2.1.1 und Action 3.2.17):

~$ irb 
>> require 'action_view' 
=> true 
>> include ActionView::Helpers::TextHelper 
=> Object 
>> pluralize(1, 'cat') 
=> "1 cat" 
>> pluralize(2, 'cat') 
=> "2 cats" 
Verwandte Themen