7

埋め込みルビー(ERB)を使用してテキストファイルを生成しています。テンプレートファイルのパスに関連する別のファイルを見つけるには、テンプレートファイルのディレクトリを知る必要があります。現在のテンプレートファイルのファイル名とディレクトリを取得するERB内の簡単な方法はありますか?

に似たものを探してい__FILE__ますが、(erb)の代わりにテンプレートファイルを指定しています。

4

1 に答える 1

9

RubyのERBAPIを使用する場合は、に文字列を指定するERB.newため、ERBがそのファイルの出所を知る方法は実際にはありません。filenameただし、属性を使用して、オブジェクトがどのファイルからのものであるかをオブジェクトに伝えることができます。

t = ERB.new(File.read('my_template.erb')
t.filename = 'my_template.erb'

__FILE__これでで使用できmy_template.erb、ファイルの名前を参照します。(これはerb実行可能__FILE__ファイルが行うことです。そのため、コマンドラインから実行するERBファイルで機能します)。

これをもう少し便利にするために、ファイルから読み取ってfilename:を設定する新しいメソッドでERBにモンキーパッチを適用することができます。

require 'erb'

class ERB
  # these args are the args for ERB.new, which we pass through
  # after reading the file into a string
  def self.from_file(file, safe_level=nil, trim_mode=nil, eoutvar='_erbout')
    t = new(File.read(file), safe_level, trim_mode, eoutvar)
    t.filename = file
    t
  end
end

これで、このメソッドを使用してERBファイルを読み取ることができ、ERBファイルで__FILE__機能し、次のファイルだけでなく実際のファイルを参照する必要があります(erb)

t = ERB.from_file 'my_template.erb'
puts t.result
于 2012-09-06T02:26:12.690 に答える