update rails official novedades features and ruby-on-rails ruby-on-rails-3 rails-engines

ruby-on-rails - official - ruby on rails website



Rieles 3.2 DiseƱos del motor (1)

He depurado el problema y en realidad no es un error en los motores. El problema se debe a la forma en que se cargan las dependencias de los rieles.

Este código se comportará de manera diferente en 2 escenarios que estás mostrando:

module Enginedemo class DashboardController < ApplicationController end end

Si ApplicationController ya está cargado, Rails asumirá que solo queremos usarlo y que en realidad no heredará de Enginedemo::ApplicationController sino de ApplicationController . En el otro escenario, cuando carga el controlador del motor por primera vez, ApplicationController aún no está cargado, por lo que Rails hace lo correcto.

Afortunadamente, este problema solo se produce en el entorno de desarrollo, ya que los controladores de producción se cargan cuando se inicia la aplicación.

No estoy seguro de si esto es algo que pueda solucionarse fácilmente en las dependencias de rieles, lo echaré un vistazo.

Por ahora, requiera explícitamente el controlador de la aplicación:

require ''enginedemo/application_controller'' module Enginedemo class DashboardController < ApplicationController end end

Me cuesta entender cómo Rails 3.2 aplica los diseños al usar motores montables.

Escenario: Estoy creando un motor que, a su vez, tiene una vista de panel y una vista de administrador para varias funciones de administración. Quiero que el tablero de mandos tenga un diseño reemplazable por la aplicación base (si el usuario lo desea), pero el administrador siempre debe usar su propio diseño.

Esto es lo que tengo en este momento dentro de mi motor;

application_controller.rb

module Myengine class ApplicationController < ActionController::Base

admin / dashboard_controller.rb

module Myengine class Admin::DashboardController < ApplicationController

ahora tengo mis motores application.html.erb aplique un fondo rojo horrible mientras que las aplicaciones base application.html.erb usan un fondo amarillo agradable para poder distinguir qué diseño de aplicación se está aplicando.

En esta situación, si primero accedo a la aplicación base, veo mi fondo amarillo (desde la aplicación base) y si voy tanto al motor como a la ruta de administración del motor, queda el fondo amarillo.

Si reinicio el servidor y primero accedo al motor, veo el fondo rojo para el motor y la ruta de administración del motor, mientras que la aplicación base muestra el fondo amarillo.

Si modifico mi admin / dashboard_controller.rb de la siguiente manera;

module Myengine class Admin::DashboardController < ApplicationController layout ''myengine/application''

que esperaría que solo se aplicara al motor / controlador de administración, pero si reinicio el servidor y accedo a la ruta del motor / administración, veo el fondo rojo mientras que la vista raíz del motor usa el diseño amarillo de la aplicación base.

Si reinicio el servidor de nuevo y accedo a la raíz del motor montado, se aplica el fondo rojo que permanece en la ruta de administración del motor también.

Aaaaarggggghhhhhh!

¿Se espera que el comportamiento tenga diferentes diseños de la aplicación en función de a qué ruta de acceso se accede primero? ¿¿Seguramente no?? ¡Debo estar haciendo algo mal!