¿Por qué puedo acceder a los métodos auxiliares para un controlador en las vistas de un controlador diferente? ¿Hay alguna forma de desactivar esto sin hackear / parchear Rails?
ruby-on-rails
ruby
helpers
Nate Smith
fuente
fuente
Respuestas:
El método de @George Schreiber no funciona a partir de Rails 3.1; el código ha cambiado significativamente.
Sin embargo, ahora hay una manera aún mejor de desactivar esta función en Rails 3.1 (y con suerte más adelante). En su config / application.rb, agregue esta línea:
Esto evitará que ApplicationController cargue todos los ayudantes .
(Para cualquiera que esté interesado, aquí está la solicitud de extracción donde se creó la función ).
fuente
La respuesta depende de la versión de Rails.
Rieles> = 3,1
Cambie la
include_all_helpers
configuración afalse
en cualquier entorno donde desee aplicar la configuración. Si desea que la configuración se aplique a todos los entornos, cámbielaapplication.rb
.Cuando es falso, omitirá la inclusión .
Rieles <3,1
Elimine la siguiente línea de
ApplicationController
De esta forma, cada controlador cargará sus propios ayudantes.
fuente
include HelperName
a la parte superior de su ApplicationHelper.En Rails 3,
actioncontroller/base.rb
(alrededor de la línea 224):Entonces sí, si deriva su clase de
ActionController::Base
, se incluirán todos los ayudantes.Para solucionar esto, llame a
clear_helpers
(AbstractClass::Helpers
; incluido enActionController::Base
) al comienzo del código de su controlador. Comentario del código fuente para clear_helpers:P.ej:
fuente
clear_helpers
el daño (de rendimiento) ya se ha hecho ya que todos los ayudantes se han cargado. Realmente desea usarconfig.action_controller.include_all_helpers = false
(como indica @Craig Walker, arriba), ya que evita que los ayudantes se carguen en primer lugar, lo que le brinda algo de rendimiento (quizás lo más significativo en el modo de desarrollo). Gracias por incluir elactioncontroller/base.rb
fragmento; Siempre es bueno ver el código y eliminar parte del misterio.clear_helpers
sigue siendo útil para rails 3.0,config.action_controller.include_all_helpers = false
solo es rails 3.1 y superior.En realidad, en Rails 2 , la funcionalidad predeterminada de ActionController :: Base era incluir todos los ayudantes.
Changeset 6222 el 24/02/07 20:33:47 (hace 3 años) por dhh : defecto que quiere todos los ayudantes, todo el tiempo (sí, sí)
cambio:
A partir de Rails 3 beta 1, ese ya no es el caso como se indica en el CHANGELOG:
fuente