Por que posso acessar métodos auxiliares para um controlador nas visualizações de um controlador diferente? Existe uma maneira de desabilitar isso sem hackear / corrigir o Rails?
ruby-on-rails
ruby
helpers
Nate Smith
fonte
fonte
Respostas:
O método de @George Schreiber não funciona a partir do Rails 3.1; o código mudou significativamente.
Porém, agora existe uma maneira ainda melhor de desabilitar este recurso no Rails 3.1 (e esperançosamente mais tarde). Em seu config / application.rb, adicione esta linha:
Isso impedirá que o ApplicationController carregue todos os auxiliares .
(Para qualquer pessoa interessada, aqui está a solicitação pull em que o recurso foi criado .)
fonte
A resposta depende da versão do Rails.
Trilhos> = 3,1
Mude a
include_all_helpers
configuração parafalse
qualquer ambiente onde você deseja aplicar a configuração. Se você deseja que a configuração se aplique a todos os ambientes, altere-a emapplication.rb
.Quando falso, ele ignorará a inclusão .
Rails <3.1
Exclua a seguinte linha de
ApplicationController
Desta forma, cada controlador carregará seus próprios auxiliares.
fonte
include HelperName
ao topo de seu ApplicationHelper.No Rails 3,
actioncontroller/base.rb
(em torno da linha 224):Então, sim, se você derivar sua classe de
ActionController::Base
, todos os ajudantes serão incluídos.Para contornar isso, chame
clear_helpers
(AbstractClass::Helpers
; incluído emActionController::Base
) no início do código de seu controlador. Comentário do código fonte para clear_helpers:Por exemplo:
fonte
clear_helpers
o dano (desempenho) já foi feito, uma vez que todos os ajudantes foram carregados. Você realmente deseja usarconfig.action_controller.include_all_helpers = false
(como @Craig Walker afirma, acima), pois evita que os helpers sejam carregados em primeiro lugar, ganhando assim algum desempenho (talvez mais significativamente no modo de desenvolvimento). Obrigado por incluir oactioncontroller/base.rb
snippet; é sempre bom ver o código e remover um pouco do mistério.clear_helpers
ainda é útil para o rails 3.0 -config.action_controller.include_all_helpers = false
é apenas o rails 3.1 e superior.Na verdade, no Rails 2 , a funcionalidade padrão do ActionController :: Base era incluir todos os helpers.
Conjunto de alterações 6222 em 24/02/07 20:33:47 (3 anos atrás) por dhh : Faça uma suposição padrão de que você quer todos os ajudantes, o tempo todo (sim, sim)
mudança:
A partir do Rails 3 beta 1, esse não é mais o caso, conforme observado no CHANGELOG:
fonte