Tôi có một viên ngọc có mã như bên này:Nhận thư mục của tập tin đó khởi tạo một ruby lớp
def read(file)
@file = File.new file, "r"
end
Bây giờ vấn đề là, nói rằng bạn có một cấu trúc thư mục như sau:
app/main.rb
app/templates/example.txt
và main.rb
có đoạn mã sau:
require 'mygem'
example = MyGem.read('templates/example.txt')
Nó đi kèm với File Not Found: templates/example.txt
. Nó sẽ hoạt động nếu example.txt
nằm trong cùng một thư mục với tên main.rb
nhưng không phải nếu nó nằm trong một thư mục. Để giải quyết vấn đề này, tôi đã thêm một đối số tùy chọn được gọi là relative_to
trong read()
. Điều này có một đường dẫn tuyệt đối để các điều trên có thể cần phải là:
require 'mygem'
example = MyGem.read('templates/example.txt', File.dirname(__FILE__))
Điều đó làm việc tốt, nhưng tôi nghĩ rằng đó là một chút xấu xí. Có anyway để làm cho nó để lớp biết những gì tập tin read()
đang được gọi và làm việc ra con đường dựa trên đó?
Thư mục main.rb không liên quan - đó là giá trị của 'Dir.pwd' quan trọng. –
Ahh cảm ơn đó là những gì tôi cần. Vấn đề là 'rspec' dường như không chạy từ thư mục bạn mong đợi. Vì vậy, tham khảo thư mục 'templates' trong' spec/'không hoạt động. – andy