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!