Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails中获取项目内的文件名_Ruby On Rails_Ruby_Ruby On Rails 4_Ruby 2.0 - Fatal编程技术网

Ruby on rails 在RubyonRails中获取项目内的文件名

Ruby on rails 在RubyonRails中获取项目内的文件名,ruby-on-rails,ruby,ruby-on-rails-4,ruby-2.0,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby 2.0,我需要使用Ruby从我的项目中提取一个文件名,并从中提取第一个单词。我在这个网站上找到了一个解决方案,我试过了,但没有成功: File.basename("/path/to/folder/here_is_my_file.rb").match(/[^_]+/) 这将按预期返回=>“here” 然而,我需要的是在不知道应该是什么的情况下获取“here”,因为文件名的第一部分是动态生成的。因此,我需要找到一种动态提取它的方法 如何实现这一点?您需要的是在路径上找到与模式匹配的文件*\u file.r

我需要使用Ruby从我的项目中提取一个文件名,并从中提取第一个单词。我在这个网站上找到了一个解决方案,我试过了,但没有成功:

File.basename("/path/to/folder/here_is_my_file.rb").match(/[^_]+/)
这将按预期返回=>“here”

然而,我需要的是在不知道应该是什么的情况下获取“here”,因为文件名的第一部分是动态生成的。因此,我需要找到一种动态提取它的方法


如何实现这一点?

您需要的是在路径上找到与模式匹配的文件
*\u file.rb

要做到这一点,请使用Ruby中的globbing from类

matched_files = Dir['/path/to/folder/*_file.rb']
#=> ['/path/to/folder/main_file.rb', '/path/to/folder/sub_file.rb', '/path/to/folder/foo_file.rb']
现在,您可以通过迭代这些文件来提取basename:

base_files = matched_files.map { |file| File.basename(file) }
#=> ['main_file.rb', 'sub_file.rb', 'foo_file.rb']
此外,如果您只想从中提取mainsubfoo,您可以根据模式进行匹配,如下所示:

base_files.map { |file| file.match(/(.*)_file.rb/)[1] }
#=> ['main', 'sub', 'foo']
收集文件名后,您可以根据条件检查这些名称,以执行该文件的所有内容


祝你好运。

如果你知道
/path/to/folder
,那么你可以使用
Dir
类获取目录中的所有文件。看看RubyAPI:也许有更好的方法来解决这个问题。动态生成这些文件的是什么?您的用例是什么?文件名是在项目中启动不同“作业”的条件。因此,根据文件的名称和在系统中的位置,将调用不同的方法。如果文件的名称类似于“main_file.rb”,则应调用特定的方法,如果文件的名称类似于“sub_file.rb”应该调用另一个操作。我不明白的是这些文件是如何到达那里的,而Rails知道如何查找它们。如果某个守护进程正在将文件放入系统中,为什么不直接点击Rails堆栈,而使用所有必需的作业信息呢?
Dir['/path/to/folder/*\u my\u file.rb']
将为您提供与该模式匹配的所有文件,然后您可以迭代收集到的文件并提取该文件,然后进行条件检查。如果那是你想要的。