Những câu trả lời khác là một chút lỗi thời, do sự thay đổi trong các đường ống tài sản Rails từ Rails 4. Các mã sau đây làm việc trong Rails 4 và 5:
Nếu tập tin của bạn được đặt trong thư mục công , sau đó sự tồn tại của nó có thể được kiểm tra với:
# File is stored in ./public/my_folder/picture.jpg
File.file? "#{Rails.public_path}/my_folder/picture.jpg"
Tuy nhiên, nếu tập tin được đặt trong tài sản thư mục sau đó kiểm tra sự tồn tại là một chút khó khăn hơn, do tài sản trước biên soạn trong môi trường sản xuất. Tôi khuyên bạn nên sử dụng phương pháp sau:
# File is stored in ./app/assets/images/my_folder/picture.jpg
# The following helper could, for example, be placed in ./app/helpers/
def asset_exists?(path)
if Rails.configuration.assets.compile
Rails.application.precompiled_assets.include? path
else
Rails.application.assets_manifest.assets[path].present?
end
end
asset_exists? 'my_folder/picture.jpg'
Nguồn
2016-09-13 15:10:51
Điều gì sẽ là tốt đẹp nếu bạn vá ảnh image_tag đã làm điều này cho bạn để bạn không phải lặp lại điều này cho từng hình ảnh. Vì vậy, kiểm tra các tập tin tồn tại nếu nó, siêu. Nếu không siêu với noimg.gif. Hoặc tạo helper image_or_default của riêng bạn (img, options) – Yule
Yea Tôi khuyên bạn nên làm sau vì tôi ghét sửa đổi các phương thức khung hiện có. –
@BrianMaltzan sau đó tôi sẽ đề nghị sử dụng một db để biết đường dẫn. Đây là những gì tôi làm với các ứng dụng web quy mô lớn cần CDN. –