Rails Heroku 如何判断图像文件是否存在于

问题描述 投票:0回答:1

我正在使用

rails 6.1.4
ruby 3.1.1

我的应用程序在 Heroku 上。我的

assets/images
目录中有几个图像,但当我部署到实时环境时,我无法显示其中一些图像。应用程序中显示了其他图像,所以我敢打赌牧场这是我的代码。所有图像都显示在我的本地计算机上。

该应用程序将

assets/images/badges/
中的图像与
image_name
模型中的
Badge
进行匹配。目前,
assets/images/badges/
中没有每个
Badge.image_name
的图像。

助手获取与 image_names 匹配的图像并将名称发送到数组中的视图。但是,如果图像不存在,我不想显示

broken-image
图标。因此,在将图像添加到数组之前,我使用
if Rails.application.assets.find_asset(image_path) != nil
来测试图像是否存在。我的猜测是这是问题区域,我不知道如何测试
assets/images/badges
目录中的图像。

代码:

app/images/badges/ (just listing 3 here)

boxing-1-bronze-150.png
boxing-1-gold-150.png
boxing-1-silver-150.png
...

我已经登录到heroku并可以列出

app/images/badges
目录,我看到这些图像在那里并且命名正确。

badges_helprer.rb

badge_images = []

if badges 
  badges.uniq!
  badges.each do |b|
    image_path = "badges/#{b.image_name}"
    if Rails.application.assets.find_asset(image_path) != nil
      badge_images << image_path
    end
  end
end

return badge_images

查看:

students/show

<% badges = get_badges_for_student(@student) %>

 <% if badges %>

   <% b_count = 0 %> 
   <% badges.each do |b| %>
     <% if b_count == 3 %>  <!-- 3 images per row -->
       <br />
       <% b_count = 0 %>
     <% end %>
     <%= image_tag(b) %>
     <% b_count += 1 %>
   <% end %>

  <% end %>

作为对我的节目视图的测试,我为我知道的其中一张图像创建了一个图像标签。

<p>Test: <%= image_tag("badges/boxing-1-gold-150.png") %></p>

它显示了,所以我返回到帮助程序页面并打赌:

if Rails.application.assets.find_asset(image_path) != nil
没有按照我认为应该的方式工作。

有没有更好的方法来测试

assets/images/badges/
目录中的图像文件。

感谢您的帮助!

ruby-on-rails ruby assets ruby-on-rails-6.1
1个回答
0
投票

我发现这有效:

if File.exists?(Rails.root.join('app','assets','images','badges',image_name))

注意:Heroku 上的

Rails.root
显示
app-name/app
,因此当我在视图中打印出来时,上面的
Rails.root.join('app','assets','images','badges',image_name)
显示
app/app/assets...
。奇怪的!!但我想它知道如何导航到正确的路径。

© www.soinside.com 2019 - 2024. All rights reserved.