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 en app/views/layouts/ (o application si no se encuentra ninguna coincidencia)
  • una vista llamada index.html.erb en app/views/people/ por defecto
  • Si desea representar otro archivo llamado index_new.html.erb , debe escribir código para eso en PeopleController#index acción de PeopleController#index como render 'index_new'
  • podemos establecer diferentes layouts para cada action escribiendo render '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 agregar config.autoload_paths += %W( #{config.root}/app/models/products ) a tu application.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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow