2011-11-01 4 views

Trả lời

14

Bạn có thể sử dụng File.exist?.

if FileTest.exist?("#{RAILS_ROOT}/public/images/#{img}") 
    image_check = image_tag("#{img}",options) 
else 
    image_check = image_tag("products/noimg.gif", options) 
end 
+0

Đ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

+0

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ó. –

+1

@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. –

2

Bạn có thể sử dụng File.file? phương pháp.

if File.file?("#{Rails.root}/app/assets/images/{image_name}") 
    image_tag("#{image_name}") 
end 

Bạn cũng có thể sử dụng File.exist? nhưng nó sẽ trả về true nếu nó tìm thấy một thư mục hoặc một tập tin. Tệp phương thức? hơi cầu kỳ hơn là tồn tại?

5

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' 
+0

'Rails.application.assets_manifest.find_sources (đường dẫn) .present?' – m1l05z