3

Rails にコントローラーがあり、新しいディレクトリを作成するためのアクションがあります。

このアクションにより、ディレクトリ「/public/graph_templates/aaa/test」が作成されます。ただし、最終ディレクトリ「test」は除外されます。これが親ディレクトリのみを作成するのはなぜですか?

  def create_temporary_template
    dir = File.dirname("#{Rails.root}/public/graph_templates/aaa/test")
    FileUtils.mkdir_p dir
  end

ドキュメント: http://ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html#method-c-mkdir_p

4

2 に答える 2

4

問題はあなたの使用にありますdirname

File.dirname("/foo/bar")
# => "/foo"

dirnameパスから最後のエントリを削除します。ドキュメントごと:

最後のコンポーネントを除く、file_name で指定されたファイル名のすべてのコンポーネントを返します。

通常、パスに次のファイル名のディレクトリまたはディレクトリ階層が含まれている場合、これは正しいことです。

File.dirname("/foo/bar/baz.txt")
# => "/foo/bar"

ただし、この場合、目的の末尾のディレクトリが切り捨てられます。

Ruby の標準ライブラリに含まれているPathnameクラスを参照することをお勧めします。File、Dir、FileUtils、FileTest、そしておそらくスイス アーミー ナイフとキッチン シンクを 1 つのクラスにラップするため、1 つのクラスでファイルとディレクトリを操作するのが非常に便利になります。

require 'pathname'
dir = Pathname.new("/foo/bar/baz.txt")
# => "/foo/bar"

dir.mkpath # would create the path

Pathname はまだ新しいものですが、非常に便利であることがわかりました。

于 2014-02-26T07:40:13.080 に答える