Ruby on Rails
Convenciones de nombres
Buscar..
Controladores
Los nombres de clase del controlador están pluralizados. La razón es que el controlador controla varias instancias de la instancia de objeto.
Por ejemplo : OrdersController
sería el controlador para una tabla de orders
. Rails buscará la definición de clase en un archivo llamado orders_controller.rb
en el directorio /app/controllers
.
Por ejemplo : PostsController
sería el controlador para una tabla de posts
.
Si el nombre de la clase del controlador tiene varias palabras en mayúsculas, se asume que el nombre de la tabla tiene guiones bajos entre estas palabras.
Por ejemplo: si un controlador se llama PendingOrdersController
, el nombre de archivo asumido para este controlador será pending_orders_controller.rb
.
Modelos
El modelo se nombra utilizando la convención de nomenclatura de clases de MixedCase ininterrumpido y es siempre el singular del nombre de la tabla.
Por ejemplo : si una tabla se llamara orders
, el modelo asociado se llamaría Order
Por ejemplo : si una tabla se llamara posts
, el modelo asociado se llamaría Post
Rails buscará la definición de clase en un archivo llamado order.rb
en el directorio /app/models
.
Si el nombre de la clase modelo tiene múltiples palabras en mayúsculas, se asume que el nombre de la tabla tiene guiones bajos entre estas palabras.
Por ejemplo: si un modelo se llama BlogPost
, el nombre de tabla asumido será blog_posts
.
Vistas y diseños
Cuando se representa una acción del controlador, Rails intentará encontrar un diseño y una vista coincidentes en función del nombre del controlador.
Las vistas y diseños se colocan en el directorio de app/views
.
Dada una solicitud a la acción del PeopleController#index
, Rails buscará:
- el diseño denominado
people
enapp/views/layouts/
(oapplication
si no se encuentra ninguna coincidencia) - una vista llamada
index.html.erb
enapp/views/people/
por defecto - Si desea representar otro archivo llamado
index_new.html.erb
, debe escribir código para eso enPeopleController#index
acción dePeopleController#index
comorender 'index_new'
- podemos establecer diferentes
layouts
para cadaaction
escribiendorender 'index_new', layout: 'your_layout_name'
Nombres de archivos y carga automática
Los archivos Rails, y los archivos Ruby en general, deben nombrarse con los lower_snake_case
archivo lower_snake_case
. P.ej
app/controllers/application_controller.rb
es el archivo que contiene la definición de la clase ApplicationController
. Tenga en cuenta que, mientras que PascalCase
se utiliza para nombres de clase y módulo, los archivos en los que residen deben ser lower_snake_case
.
La nomenclatura coherente es importante ya que Rails utiliza los archivos de carga automática según sea necesario y utiliza la "inflexión" para transformar entre diferentes estilos de denominación, como la transformación del application_controller
de application_controller
en ApplicationController
y viceversa.
Por ejemplo, si Rails ve que la clase BlogPost
no existe (aún no se ha cargado), buscará un archivo llamado blog_post.rb
e intentará cargar ese archivo.
Por lo tanto, también es importante nombrar los archivos por lo que contienen, ya que el autocargador espera que los nombres de los archivos coincidan con el contenido. Si, por ejemplo, la blog_post.rb
lugar contiene una clase llamada solo Post
, verá una LoadError
: Expected [some path]/blog_post.rb to define BlogPost
.
Si agrega un directorio en app/something/
(por ejemplo, / models / products /), y
- desea espacios de nombres y clases dentro de new dir, entonces no necesita hacer nada y se cargará solo. Por ejemplo, en la
app/models/products/ you would need to wrap your class in
módulo Productos`. - no quiero que los espacios y las clases de espacio de nombres
config.autoload_paths += %W( #{config.root}/app/models/products )
dentro de mi nuevo directorio, entonces debes agregarconfig.autoload_paths += %W( #{config.root}/app/models/products )
a tuapplication.rb
para autoload.
Una cosa más a la que prestar atención (especialmente si el inglés no es su primer idioma) es el hecho de que Rails da cuenta de los sustantivos irregulares en plural en inglés. Por lo tanto, si tiene un modelo llamado "Foot", el controlador correspondiente debe llamarse "FeetController" en lugar de "FootsController" si desea que el enrutamiento "mágico" de los rieles (y muchas de estas características) funcione.
Clase de modelos del nombre del controlador
Puede obtener una clase de modelo de un nombre de controlador de esta manera (el contexto es la clase de controlador):
class MyModelController < ActionController::Base
# Returns corresponding model class for this controller
# @return [ActiveRecord::Base]
def corresponding_model_class
# ... add some validation
controller_name.classify.constantize
end
end