2012-09-20 7 views
11

Ich mag ein Modell in Schienen schaffen:Aufschalten Rails-Controller-Routing mit Großbuchstaben in dem Modellnamen

rails generate model ABCThing 

So wird dies eine Tabelle erstellen, abc_things. Groß. Das Problem kommt mit dem Controller und Routing. Ich möchte mein Controller sein:

class ABCThingsController < ApplicationController 
end 

Doch nach routes.rb

resources :abc_things, :only => [:index] 

und die Schaffung der entsprechenden index Ansicht in der Zugabe, erhalte ich die folgende Fehlermeldung im Browser:

Expected /app/controllers/abc_things_controller.rb to define AbcThingsController 

Das Problem ist leicht zu sehen ("ABCThings".tableize.classify => "AbcThing"), aber ich bin nicht so sicher, wie es zu beheben ist. Ich möchte Rails Default Routing von der Ansicht auf den Controller zu überschreiben, bin mir aber nicht sicher, wie.

Würde jede Hilfe dankbar (und Vorschläge für eine bessere Frage Titel!)

+1

Kann ich Sie fragen, warum auf der Erde würden Sie willst du das machen? Konventionen sind eine der Stärken von RoR, warum haben sie gebrochen? BTW-Modellnamen sollten nicht im Plural sein. – cthulhu

+0

Der Plural in der Modellgeneration war ein Tippfehler, aber sicherlich können Sie schätzen, gibt es unzählige Drei-Buchstaben-Akronyme, für die Großschreibung nur den ersten Buchstaben des Akronyms wirklich nicht viel grammatischen Sinn macht – rwb

+3

@cthulhu aus dem gleichen Grund, die Schienen unterstützt Beugungen. Sie sollten * Konventionen * sein, keine Gesetze. – mahemoff

Antwort

12

Ich hatte dieses Problem enthalten könnten und nach allen oben genannten Lösungen versuchen; war in der Lage, mein Problem mit dem Beuger zu beheben.

In meinem Fall war das Problem, dass TLA::ThingsController als TlaThingsController wurde

aufgelöst

setzen folgendes in meinem initializers es feste Ordner

config/initializers/inflections.rb

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.acronym 'TLA' 
end 
+1

Dies ist der Rails-Weg und sollte upvoted werden. Vielen Dank – rwb

-1

Wenn Sie Befehl ausführen

rails generate model ABCThings 

Es Modell generieren und keinen Controller. Wenn Sie sowohl Modell und Controller verwenden möchten folgende

rails generate scaffold ABCThings 

ich glaube, Sie sind generieren nicht Controller mithilfe Schienen Befehl und daher wurde Problem aufgetreten Befehl

rails generate controller ABCThings 

folgende Controller verwenden zu generieren und Sie können /app/controllers/abc_things_controller.rb als

class AbcThingsController < ApplicationController 
end 
+0

Huh? Ich habe meinen Controller manuell erstellt. Ich möchte 'Klasse ABCThingsController rwb

2

folgt sollten Sie benutzerdefinierte Controller-Namen festgelegt, in Route s.rb:

resources :abc_things, :only => [:index], :controller => "ABCThings" 
+0

gleiche Fehlermeldung haben. Ich denke auch, du meinst ': controller =>" ABCThings "' – rwb

+0

oh, sorry, yep nur der Name ohne 'Controller' Teil, jetzt bearbeiten – byterussian

+2

Dies wird jetzt eine Warnung generieren, wie in den [Schienen Guides] (http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use): "Es wird nur die Verzeichnisnotation unterstützt. Den Controller mit Ruby-Konstantennotation angeben (zB.": controller => 'Admin :: UserPermissions "") kann zu Routing-Problemen führen und führt zu einer Warnung. " –

2

Dieses irgendwann Ruby haben sich geändert, aber für Klassen mit mehreren Kappen in einer Reihe (Akronyme oder initialisms) zu nennen, die Sie nicht mehr benötigen Sie den Unterstrich im Dateinamen enthalten.

# abc_thing.rb 

class ABCThing 

    def hello 
    puts "Hello World" 
    end 

end 

oder

class AbcThing 

    def hello 
    puts "Hello World" 
    end 

end