2012-01-21 8 views
1

RailsでERBハンドラを無効にする方法はありますか?RailsでERBハンドラを無効にする

これはばかげているかもしれませんが、私たちはSLIMに移行しており、 には、まだ怠け者の開発者がERBを使用していないようにしたいと考えています。

+0

私はActionView :: Template :: Handlersでの作業を開始します。それがerbハンドラを登録するものです。一番簡単なのは、登録抹消と登録抹消をすることです。 –

答えて

5

私が見る限り、unregisterにはテンプレートハンドラがありません。

しかし、私たちはハックによってそれを行うことができます。

ActionView::Template::Handlers::ERBには次の行があります。

self.class.erb_implementation.new(
    erb, 
    :trim => (self.class.erb_trim_mode == "-") 
).src 

だから、楽しんでください。

私たちは、ERBを使用しようとする任意のビューが、私はこれが動作するはずだと思う

ActionView::Template::Error (ERB is not allowed): 
+0

+1、容易; -0.25、醜い。 –

+0

ERBの使用に何か問題がありますか? – Uchenna

+1

@UchennaOkafor、私が含まれている人もいますが、erbの冗長さを避けることを好みます。 – Zabba

1

エラーが発生しますconfig/initializers/no_erb_allowed.rb

class NoErbAllowed 
    def initialize(*args) 
    raise "ERB is not allowed" 
    end 
end 

ActionView::Template::Handlers::ERB.erb_implementation = NoErbAllowed 

初期化子を追加します:

handlers = ActionView::Template::Handlers.class_variable_get :@@template_handlers 

handlers.delete :erb 

ActionView::Template::Handlers.class_variable_set :@@template_handlers, handlers 

基本的にこれは@@template_handlersハッシュをから取得します0の場合は、:erbキー(ERBハンドラを指す)を削除し、クラスに戻します。

これはおそらくinitializerになります。それは便利だという希望を(明らかに)ActionView::Template::Handlers後にロードする必要があるが、私はそれがto_prepareまたはbefore_eager_load初期化子に属し、例えば思いので、ハンドラ自体がロードされる前に:

module YourApp 
    class Application < Rails::Application 
    config.before_eager_load do 
     handlers = ActionView::Template::Handlers.class_variable_get :@@template_handlers 

     handlers.delete :erb 

     ActionView::Template::Handlers.class_variable_set :@@template_handlers, handlers 

    end 

    end 
end 

関連する問題