2009-11-26 7 views

Antwort

18

Nun in Schienen, können Sie einen string#singularize|#pluralize Vergleich tun, um einen wahren oder falschen Wert zurückzugeben.

Aber ich würde denken, aufgrund der Natur der Sprache selbst, könnte dies einige Backup zu tun, um völlig korrekt zu sein.

Man könnte so etwas wie diese

def test_singularity(str) 
    str.pluralize != str && str.singularize == str 
end 

Aber um zu sehen, wie genau, ich lief eine schnelle Reihe von Worten tun.

%w(word words rail rails dress dresses).each do |v| 
    puts "#{v} : #{test_singularity(v)}" 
end 

word : true 
words : false 
rail : true 
rails : false 
dress : false 
dresses : false 

Ich war ein wenig überrascht, tatsächlich, da ‚Kleid‘ richtig pluralized bekommt, aber wenn es den #singularize durchläuft läuft es in ein bisschen einen Haken.

'dress'.pluralize # => dresses 
'dress'.singularize # => dres 
+2

Das Problem "dress" .singularize ist hier gelöst: https: //rails.lighthouseapp.com/projects/8994/tickets/2399-incorrect-inflectors-for-business-or-ness # ticket-2399-5 – kikito

9

Meistens teste ich nie für Singularität oder Plural, ich wandle es nur in die Singular oder Pluralform, die ich benötige.

In Rails 2.3.x dies möglich war, so etwas wie dies auf diesem

plural_form = org_word.singularize.pluralize 
singular_form = org_word.pluralize.singularize 

Schreiben weiter arbeiten, eine Arbeitsfunktion ist einfach zu liefern:

require 'active_support' 

def is_singular?(str) 
    str.pluralize.singularize == str 
end 


%w(word words rail rails dress dresses).each do |v| 
    puts "#{v} : #{is_singular?(v)}" 
end 

, die gibt die folgenden Ausgabe:

word : true 
words : false 
rail : true 
rails : false 
dress : true 
dresses : false 

In Schienen 4, mit den gegebenen Wörtern ist es jetzt viel einfacher. Sie können nur

plural_form = org_word.pluralize 
singular_form = org_word.singularize 

tun und damit die Funktion wird viel einfacher als gut:

require 'active_support' 

def is_singular?(str) 
    str.singularize == str 
end 
+0

Das Problem "dress" .singularize ist hier gelöst: https://rails.lighthouseapp.com/projects/8994/tickets/2399-incorrect-inflectors-for-business-or-ness # ticket-2399-5 – kikito

+0

Inflektoren sorgen dafür, dass der Plural oder Singular für schwierige Fälle definiert werden kann. Zum Beispiel: für das Ventil ist nötig es. Aber meistens wollen Sie nur Modelle vereinzeln und pluralisieren? So werden diese Fälle bereits korrigiert (oder Ihre Routen würden durcheinander gebracht werden). Aber meine Routine hat die richtige Antwort für Kleid/Kleider zurückgegeben. – nathanvda

+0

Warum zuerst in den Plural? – Simon

0

Weder Rubin noch Schienen sind mit einem speziellen Verfahren zum Testen für „Pluralität“ auf Worte.

Wie gesagt, das meiste, was Sie tun können, ist sie selbst zu implementieren, im Vergleich mit word.pluralize und word.singularize. Dies wird Ihnen eine schnelle und billige und generell gute Testmethode geben. Es wird jedoch einige Male scheitern.

Wenn Sie mehr Präzision benötigen, müssen Sie die Ruby Linguistics gem verwenden, die mit Kleid und Kleider richtig umgehen kann (aber es ist schwerer).

+0

eigentlich ist das singularize stuff nicht standardmäßig auf rails enthalten, kann aber über einen inflector gelöst werden. Siehe meine Kommentare zu anderen Posts. – kikito