2012-09-20 24 views
11

Quiero crear un modelo en rieles:Override rieles controlador de encaminamiento con mayúsculas en el nombre del modelo

rails generate model ABCThing 

Así que esto va a crear una mesa, abc_things. Estupendo. El problema viene con el controlador y el enrutamiento. Quiero que mi controlador sea:

class ABCThingsController < ApplicationController 
end 

Sin embargo, después de añadir en el routes.rb

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

y la creación de la index vista correspondiente, me sale el siguiente error en el explorador:

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

El problema es fácil de ver ("ABCThings".tableize.classify => "AbcThing"), pero no estoy seguro de cómo solucionarlo. Quiero anular el enrutamiento predeterminado de los rieles desde la vista hasta el controlador, pero no estoy seguro de cómo.

agradecería cualquier ayuda (y sugerencias para un mejor título de la pregunta!)

+1

¿Puedo preguntarle por qué en la tierra usted quieres hacer eso? Las convenciones son uno de los puntos fuertes de RoR, ¿por qué los rompió? Los nombres de los modelos BTW no deben ser plurales. – cthulhu

+0

El plural en la generación del modelo fue un error tipográfico, pero seguramente se puede apreciar que hay innumerables acrónimos de letras para los que capitalizar solo la primera letra del acrónimo realmente no tiene mucho sentido gramatical – rwb

+3

@cthulhu por la misma razón que Rails admite Inflexiones. Se supone que son * convenciones *, no leyes. – mahemoff

Respuesta

12

tuve este problema y después de probar todas las soluciones anteriores; pude solucionar mi problema usando el inflector.

En mi caso, el problema era que TLA::ThingsController se resolvía como TlaThingsController

poniendo lo siguiente en mis inicializadores carpeta arreglaron

config/initializers/inflections.rb

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

Este es el camino de Rails y debe ser actualizado. Gracias – rwb

-1

Al ejecutar comandos

rails generate model ABCThings 

Se generará modelo y no un controlador. Si desea que el modelo y el controlador uso tras

rails generate scaffold ABCThings 

Creo que no se genera el controlador usando el mando de los carriles y por lo tanto problema fue producido para generar el uso del controlador siguiente comando

rails generate controller ABCThings 

y usted puede /app/controllers/abc_things_controller.rb de la siguiente manera

class AbcThingsController < ApplicationController 
end 
+0

¿Eh? Creé mi controlador manualmente. Quiero tener 'clase ABCThingsController rwb

2

debe establecer el nombre del controlador personalizado, en la ruta s.rb:

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

Mismo mensaje de error. También creo que te refieres a ': controller =>" ABCThings "' – rwb

+0

oh, lo siento, sí, solo el nombre sin parte 'Controller', edítalo ahora – byterussian

+2

Esto generará una advertencia ahora, según las [Rails Guides] (http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use): "Solo se admite la notación de directorio. Especificar el controlador con la notación constante de ruby ​​(por ejemplo,': controller => 'Admin :: UserPermissions '') puede conducir a problemas de enrutamiento y a resultados en una advertencia ". –

2

Esto puede haber cambiado con Ruby en algún momento, pero para nombrar las clases con múltiples tapas en una fila (acrónimos o siglas), ya no es necesario incluir el guión bajo en el nombre del archivo.

# abc_thing.rb 

podría contener

class ABCThing 

    def hello 
    puts "Hello World" 
    end 

end 

o

class AbcThing 

    def hello 
    puts "Hello World" 
    end 

end 
Cuestiones relacionadas