Tôi muốn viết một cái gì đó vào một tập tin.Errno :: ENOENT (Không có tập tin hoặc thư mục @ rb_sysopen
# where userid is any intger [sic]
path = Rails.root + "public/system/users/#{user.id}/style/img.jpg"
File.open(path, 'wb') do |file|
file.puts f.read
end
Khi mã này được thực thi, tôi nhận được lỗi này. Tôi biết thư mục này doesn' t tồn tại, nhưng File.open
với chế độ w
tạo ra một tập tin mới nếu nó không tồn tại.
Tại sao điều này không làm việc?
Chỉ cần tò mò: Tại sao File.join nên ở đây? Nó nối các thành phần đường dẫn luôn với bộ tách riêng của nền tảng (ví dụ, '\' trên Windows). Trong khi có ** trường hợp **, đây là những gì chúng ta muốn đạt được, chúng ta thường cố gắng gắn bó với '/' trên tất cả các nền tảng, bởi vì điều này cho phép ít đau đầu hơn về tính di động. Trong trường hợp mã được đăng ở đây, tôi không thấy lý do tại sao các tệp phân tách dành riêng cho nền tảng có thể là một lợi thế. – user1934428
@ user1934428 "chúng tôi thường cố gắng gắn bó với/trên tất cả các nền tảng, vì điều này cho phép ít đau đầu hơn về tính di động" —các điều này là vô nghĩa, bằng cách sử dụng 'File.join' giúp tránh những sai lầm ngớ ngẩn như lỗi trong OP:' Rails.root' không kết thúc bằng dấu gạch chéo và sử dụng '+' cho '/ railsrootpublic /' (lưu ý dấu gạch chéo ở trên.) – mudasobwa
@mudasobwa: Trong thanh điều khiển đường ray của tôi Rails.root + "bla/bla" Cung cấp chính xác đường dẫn :) – ashwintastic