Rails:文件路径

soc*_*ket 33 ruby ruby-on-rails ruby-on-rails-3

我在app一个名为的目录内csv,在这个目录里面我有一个文件,names.csv 我想用File.read(path:string)函数来读取文件.
该文件的相对路径是什么?

tam*_*ama 58

file = File.join(Rails.root, 'app', 'csv', 'names.csv')
File.read(file)
Run Code Online (Sandbox Code Playgroud)

  • 没有必要使用`File.join`,因为`Rails.root`是一个`Pathname`对象.只需这样做:`Rails.root +"app/csv/names.csv"` (24认同)
  • 特别是,File.join不会保护您免受一个或多个路径部分'..'的影响,并且如果给定File.join,将很乐意生成类似'app/csv /../ controllers/users_controller.rb'的路径(Rails.root,'app','csv','../control/user_controller.rb')或File.join(Rails.root,'app','csv','..','controllers', 'user_controller.rb') (3认同)
  • @RyanBigg的评论:每次在路径中使用反斜杠或正斜杠时,都会使应用特定于操作系统。`File.join`是更安全的方法 (3认同)

use*_*245 12

你应该做: Rails.root.join "app", "csv", "names.csv"

Rails.root返回PathName对象.PathName有一个join方法,它接受任意数量的参数并将其附加到路径名以创建新路径.

阅读PathName#join here:

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/pathname/rdoc/Pathname.html#method-i-join


Laa*_*aas 6

Rails.root 指向rails项目的顶级文件夹,因此路径为:

File.read(File.join(Rails.root, 'app','csv','names.csv'))
Run Code Online (Sandbox Code Playgroud)