の使い方File.join()
が間違っています。String オブジェクトのメソッドがないため、これを.join()
適用するとエラーが発生します。.last
.last
pry(main)> extension = '.xml'
=> ".xml"
pry(main)> File.join(extension).last
NoMethodError: undefined method `last' for ".xml":String
代わりに、ファイルへのパスに結合するパス要素の配列を渡す必要があります。
pry(main)> File.join('.', 'path', 'to', 'a', 'file.ext')
=> "./path/to/a/file.ext"
また:
pry(main)> File.join('/', 'path', 'to', 'a', 'file.ext')
=> "/path/to/a/file.ext"
File
時間をかけて Ruby のクラスについて読んでください。これにより、OS にかなり依存しない方法でファイルとパスを操作できます。
そのdirname
、basename
、およびextname
メソッドは、パスを分析するときに便利です。
pry(main)> File.dirname('/path/to/a/file.ext')
=> "/path/to/a"
pry(main)> File.basename('/path/to/a/file.ext')
=> "file.ext"
pry(main)> File.extname('/path/to/a/file.ext')
=> ".ext"
split
と を組み合わせdirname
て、パスと "filename.ext" の両方を返すメソッドもあり、basename
並列代入を使用できます。
pry(main)> dirname, filename = File.split('/path/to/a/file.ext')
=> ["/path/to/a", "file.ext"]
File.basename
オプションの「拡張」パラメーターを取り、拡張を削除できるようにします。
pry(main)> File.basename('/path/to/a/file.ext', '.ext')
=> "file"
その魔法のような良さをすべて組み合わせると、ファイル名とパスを 1 日中折りたたんだり、紡いだり、切断したりできます。