如何在ruby上导航两个目录

如何在ruby上导航两个目录,ruby,directory,Ruby,Directory,在Ruby中,我有一个全局变量$file\u folder,它提供了当前配置文件的位置: $file_folder = "#{File}" $file_folder = /repos/.../test-folder/features/support 我需要访问另一个文件夹中的文件,该文件夹有两层向上和两层向下。是否有任何方法可以使用当前位置导航到此目标路径 target path = /repos/..../test-folder/lib/resources 有两种方法可以做到这一点(好吧,

在Ruby中,我有一个全局变量
$file\u folder
,它提供了当前配置文件的位置:

$file_folder = "#{File}"
$file_folder = /repos/.../test-folder/features/support
我需要访问另一个文件夹中的文件,该文件夹有两层向上和两层向下。是否有任何方法可以使用当前位置导航到此目标路径

target path = /repos/..../test-folder/lib/resources

有两种方法可以做到这一点(好吧,有几种,但这里有两种好方法)。首先,使用
文件。展开\u path

original_path = "/repos/something/test-folder/features/support"
target_path = File.expand_path("../../lib/resources", original_path)

p target_path
# => "/repos/something/test-folder/lib/resources"
请注意,它将始终返回一个绝对路径,因此,如果您希望返回相对路径,则不合适。如果使用它,请确保第二个参数是绝对路径,或者,如果是相对路径,请确保您知道它将扩展到什么(这取决于当前工作目录)

接下来,使用
Pathname#join
(别名为
Pathname++
):

我更喜欢路径名,因为它使使用路径变得非常简单。通常,您可以将Pathname对象传递给采用路径的任何方法,但有时方法会拒绝使用字符串以外的任何对象,在这种情况下,您需要首先将其转换为字符串:

p target_path.to_s
# => "/repos/something/test-folder/lib/resources"
p.S.
foo=“#{bar}”
是Ruby中的反模式。如果
bar
已经是一个字符串,您应该直接使用它,即
foo=bar
。如果bar还不是字符串(或者您不确定),则应使用
to_s
显式将其强制转换,即
foo=bar.to_s


全局变量在Ruby中是一种讨厌的代码气味。几乎总有比使用全局变量更好的方法。

只需向我们展示文件夹结构即可。。通过在你的问题中概念性地画出来。。这将有助于我们快速帮助您。例如,请看如何绘制。。
p original_path.parent.parent
# => #<Pathname:/repos/something/test-folder>

p original_path.parent.parent + "lib/resources"
# => #<Pathname:/repos/something/test-folder/lib/resources>
p target_path.to_s
# => "/repos/something/test-folder/lib/resources"