Wie überschreibe ich Namenskonventionen für Schienen?

74

Ich habe ein Modell namens "Kleidung", das ich als Singlular (ein Kleidungsstück) bezeichnen möchte. Standardmäßig sagt Schienen, dass der Plural Kleidung ist. Richtig oder falsch, ich denke, es ist besser lesbar, wenn der Plural "Kleidung" ist.

Wie überschreibe ich die Plural-Namenskonvention? Kann ich es im Modell richtig machen, damit ich es nicht immer wieder machen muss? Wie wird sich dadurch ändern, wie Routen behandelt werden (ich verwende eine erholsame Architektur)?

Chrishomer
quelle
10
Wie wäre es, wenn Sie Ihr Modell auf Kleidungsstücke und Kleidungsstücke umstellen?
Rich Seller
Siehe auch
Lucio

Antworten:

126

Ich bin kein RoR-Experte, habe aber einen möglichen Ansatz gefunden . Auf der referenzierten Site können Sie der config/initializers/inflections.rbDatei eine Flexionsregel hinzufügen :

# Add new inflection rules using the following format 
ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'clothing', 'clothes'
end
Reicher Verkäufer
quelle
45
Eigentlich sollten sich Ihre benutzerdefinierten Beugungen in config / initializers / inflections.rb befinden
Aaron Rustad
3
Für diejenigen, die faul sind wie ich: ActiveSupport::Inflector.inflections do |inflect|Wenn es Inflector nicht alleine findet
Abe Petrillo
Ich mag deinen Ansatz. Wenn ich viele "benutzerdefinierte" Beugungen hätte, würde ich sie in einem Yaml speichern und die Datei in dasselbe Archiv laden.
Aldana
1
Wenn ein optionales Gebietsschema übergeben wird, können Regeln für andere Sprachen angegeben werden. Wenn nicht angegeben, wird standardmäßig Folgendes verwendet : en, das Regeln für die englische Sprache enthält. ActiveSupport::Inflector.inflections(:en)
Sree Raj
28

Für Schienen 2.3.2 und vielleicht 2+ müssen Sie es etwas anders machen:

ActiveSupport::Inflector.inflections do |inflect|
    inflect.plural /^(ox)$/i, '\1\2en'
    inflect.singular /^(ox)en/i, '\1'

    inflect.irregular 'octopus', 'octopi'

    inflect.uncountable "equipment"
end
Chrishomer
quelle
5

Fügen Sie dies in Ihre environment.rbDatei ein, wenn Sie versuchen, die Datenbankpluralisierung zu stoppen

ActiveRecord::Base.pluralize_table_names = false
Shan Valleru
quelle
-1

Mit Ruby 2.2.2 Windows oder Linux war für mich die beste Lösung:

ActiveRecord::Base.pluralize_table_names = false

class Persona < ActiveRecord::Base
end


personas = Persona.all
personas.each do | personita |
  print "#{personita.idpersona}   #{personita.nombre}\n"
end

p Persona.count
JAGJ jdfoxito
quelle