<%= image_tag("/images/users/user_" + @user_id.to_s + ".png") %>
このような画像があるかどうかを確認するにはどうすればいいですか?そうでない場合は何も表示しないでください。イメージがRailsに存在するかどうかを確認するには?
Rails 3.07で作業しています。
<%= image_tag("/images/users/user_" + @user_id.to_s + ".png") %>
このような画像があるかどうかを確認するにはどうすればいいですか?そうでない場合は何も表示しないでください。イメージがRailsに存在するかどうかを確認するには?
Rails 3.07で作業しています。
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
File.fileは使用できますか?方法。
if File.file?("#{Rails.root}/app/assets/images/{image_name}")
image_tag("#{image_name}")
end
File.exist?を使用することもできます。ディレクトリやファイルが見つかるとtrueを返します。 メソッドファイル?存在するよりもやや厄介ですか?
他の回答には、少し古くなっているため、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'
'Rails.application.assets_manifest.find_sources(path).present?' – m1l05z
これはあなたのためにこれをしたので、画像ごとにこれを繰り返す必要はありません。だからファイルが存在すればそれをチェックしてください。それ以外の場合はnoimg.gifでスーパーです。または独自のヘルパーを作成するimage_or_default(img、options) – Yule
そうですが、私は既存のフレームワークメソッドを変更することが嫌いなので、後でやり直すことをお勧めします。 –
@BrianMaltzan次に、dbを使ってパスを知ることをお勧めします。これは、CDNを必要とする大規模なWebアプリケーションで行うことです。 –