Как проверить, существует ли изображение в Rails? - PullRequest
10 голосов
/ 01 ноября 2011
<%= image_tag("/images/users/user_" + @user_id.to_s + ".png") %>

Как проверить, есть ли такое изображение, а если нет, то ничего не отображается?

Работа в Rails 3.07.

Ответы [ 4 ]

15 голосов
/ 01 ноября 2011

Вы можете использовать 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
8 голосов
/ 13 сентября 2016

Другие ответы немного устарели из-за изменений в конвейере ресурсов Rails после Rails 4. Следующий код работает в Rails 4 и 5:

Если ваш файл помещен в public, тогда его существование можно проверить с помощью:

# File is stored in ./public/my_folder/picture.jpg
File.file? "#{Rails.public_path}/my_folder/picture.jpg"

Однако, если файл помещен в каталог assets , тогда проверка существования становится немного сложнее из-за активапредварительная компиляция в производственных средах.Я рекомендую следующий подход:

# 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 голосов
/ 19 апреля 2018

Для Рельсы 5 , который работал для меня:

ActionController::Base.helpers.resolve_asset_path("logos/smthg.png")

возвращает nil, если актив отсутствует, и path_of_the_asset, если присутствует

?

2 голосов
/ 12 апреля 2016

Вы можете использовать File.file? метод.

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

Вы также можете использовать File.exist? метод, но он вернет true, если найдет каталог или файл. Файл метода? немного более требователен, чем существует?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...