我有方法:
`# require modules here
require "yaml"
def load_library(file_path)
# code goes here
file_path = YAML.load_file('emoticons.yml')
file_path
end
我试图让它加载emoticons.yml
文件,但是当我尝试使用文件路径参数运行该方法时
load_library(".lib/emoticons.yml")
我收到以下错误:
<Errno::ENOENT: No such file or directory @ rb_sysopen - emoticons.yml>
回溯:
./lib/translator.rb:6:in load_library'
./spec/translator_spec.rb:4:in block (3 levels) in <top (required)>'
./spec/translator_spec.rb:4:in block (2 levels) in <top (required)>'
./spec/translator_spec.rb:4:in `block (2 levels) in <top (required)>'
语法有问题,或者我需要将require "yaml"
放在方法中吗?
答案 0 :(得分:1)
您遇到的问题是您希望File命令将应用程序根目录用作当前目录(pwd),但它使用ENV['PWD']
。
例如,如果您的文件位于app/helpers/yaml.rb
,则您对Yaml.load_file
的调用将在app/helpers/lib/emoticons.yml
处查找该文件。
如果文件实际位于另一个目录中,例如your_rails_app/lib/emoticons.yml
,则可以指定目录(In Ruby, how do I specify a file in another directory as an input?)。
Rails还有一种更简单的方法:Rails.root
。此方法返回指向Rails应用程序目录的Pathname
实例。 Pathname
上的一个方便的方法是join
,它将自动连接你提交的字符串,并在两者之间放置必要的正斜杠而不重复。
因此,您可以使用它来指定Yaml.load_file
的文件的完整路径:
YAML.load_file(Rails.root.join('lib', 'emoticons.yml'))
如果要在方法中处理,或者可以在发送给方法的参数中指定完整路径。
答案 1 :(得分:0)
用户违反路径而不是相对路径
而不是
.lib/emoticons.yml
尝试使用
Rails.root.join('lib', 'emoticons.yml')