<%= image_tag("/images/users/user_" + @user_id.to_s + ".png") %>
如何检查是否有这样的图像,如果没有,则不显示任何内容?
使用Rails 3.07。
答案 0 :(得分:15)
您可以使用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
答案 1 :(得分:8)
由于自Rails 4以来Rails资产管道发生了变化,其他答案有点过时了。以下代码适用于Rails 4和5:
如果您的文件位于公开目录中,则可以使用以下方式检查其存在:
# File is stored in ./public/my_folder/picture.jpg
File.file? "#{Rails.public_path}/my_folder/picture.jpg"
但是,如果文件放在资产目录中,那么由于生产环境中的资产预编译,检查存在会有点困难。我建议采用以下方法:
# 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'
答案 2 :(得分:2)
你可以使用File.file吗?方法。
if File.file?("#{Rails.root}/app/assets/images/{image_name}")
image_tag("#{image_name}")
end
您还可以使用File.exist吗?方法,但如果找到目录或文件,它将返回true。 方法文件?比存在更挑剔?
答案 3 :(得分:2)
对于 Rails 5 ,对我有用的是
ActionController::Base.helpers.resolve_asset_path("logos/smthg.png")
返回nil
,如果存在,则返回path_of_the_asset