私はこのために宝石があるかどうかわかりませんが、あなたがにあるすべてのビューとパーシャルの出力をレンダリングするために設計されたクラスを上書きすることができます
.bundle/ruby/ruby-2.3.1/gems/action-view-4.2.5.1/lib/action_view/template.rb
(バージョン番号を交換してください)
def compile(mod)
owerwriteというメソッドがあり、ビューに表示するカスタム文字列を追加できます。あなたのケースのために、あなたがこのような何かを行うことができます:
code.insert(63, "@output_buffer.safe_append='\n<!--#{self.inspect} start -->\n'.freeze\;")
code.insert(code.size-19, "@output_buffer.safe_append='\n<!--#{self.inspect} end -->\n'.freeze\;")
そしてそれは、ビューのすべてのパーシャルとすべてのビューでの出力は、彼らがレンダリングされますよう:
def compile(mod) #:nodoc:
encode!
method_name = self.method_name
code = @handler.call(self)
# This is the code I have added
code.insert(63, "@output_buffer.safe_append='\n<!--#{self.inspect} start -->\n'.freeze\;")
code.insert(code.size-19, "@output_buffer.safe_append='\n<!--#{self.inspect} end -->\n'.freeze\;")
# Make sure that the resulting String to be eval'd is in the
# encoding of the code
source = <<-end_src
def #{method_name}(local_assigns, output_buffer)
_old_virtual_path, @virtual_path = @virtual_path, #{@virtual_path.inspect};_old_output_buffer = @output_buffer;#{locals_code};#{code}
ensure
@virtual_path, @output_buffer = _old_virtual_path, _old_output_buffer
end
end_src
# Make sure the source is in the encoding of the returned code
source.force_encoding(code.encoding)
# In case we get back a String from a handler that is not in
# BINARY or the default_internal, encode it to the default_internal
source.encode!
# Now, validate that the source we got back from the template
# handler is valid in the default_internal. This is for handlers
# that handle encoding but screw up
unless source.valid_encoding?
raise WrongEncodingError.new(@source, Encoding.default_internal)
end
mod.module_eval(source, identifier, 0)
ObjectSpace.define_finalizer(self, Finalizer[method_name, mod])
end
を私が追加したコードです。あなたが例render_override.rb
&ペーストコード何かのために、と呼ばれるあなたのRailsプロジェクトのconfig/initializers/
ディレクトリに新しい初期化を作成し、別のクラスにそれを抽出したい場合
<!--app/views/profiles/_header.html.erb start -->
Your text on the page
<!--app/views/profiles/_header.html.erb end -->
:
結果は次のようになりますこのような:
ActionView::Template.class_eval do
# @override
def compile(mod)
encode!
method_name = self.method_name
code = @handler.call(self)
# This is the code I have added
code.insert(63, "@output_buffer.safe_append='\n<!--#{self.inspect} start -->\n'.freeze\;")
code.insert(code.size-19, "@output_buffer.safe_append='\n<!--#{self.inspect} end -->\n'.freeze\;")
# Make sure that the resulting String to be eval'd is in the
# encoding of the code
source = <<-end_src
def #{method_name}(local_assigns, output_buffer)
_old_virtual_path, @virtual_path = @virtual_path, #{@virtual_path.inspect};_old_output_buffer = @output_buffer;#{locals_code};#{code}
ensure
@virtual_path, @output_buffer = _old_virtual_path, _old_output_buffer
end
end_src
# Make sure the source is in the encoding of the returned code
source.force_encoding(code.encoding)
# In case we get back a String from a handler that is not in
# BINARY or the default_internal, encode it to the default_internal
source.encode!
# Now, validate that the source we got back from the template
# handler is valid in the default_internal. This is for handlers
# that handle encoding but screw up
unless source.valid_encoding?
raise WrongEncodingError.new(@source, Encoding.default_internal)
end
mod.module_eval(source, identifier, 0)
ObjectSpace.define_finalizer(self, Finalizer[method_name, mod])
end
end
再起動して、変更をピックアップすることができ、あなたの意見は、現在、これらの新しい設定でレンダリングされるようにサーバー。
あなたの評価クラスをチェックRAILS_ENV='dev'
または同様のものに囲み、開発中に実行できるようにしたい場合は、すぐに実行できます。
私がこれを理解しているかどうかを見てみましょう。レンダリングの呼び出しがあるたびに、レンダリングされたページのHTMLソースにコメントを追加して、レンダリングされたHTMLへのルートを追加したいとしますか?そして、これはあなたの開発環境だけにありますか? – mlabarca
各レンダリングの前に、ファイルパスのコメントを追加するために必要な要件があれば –
これは設定ベースではありませんが、app/views/*をループしてファイル名のコメントの前に[shell script](http ://stackoverflow.com/questions/10587615/unix-command-to-prepend-text-to-a-file)。 – anyarms