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)?


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

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

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

5

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

ActiveRecord::Base.pluralize_table_names = false

-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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.