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

ekqde3dh  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(73)

我使用rails 6.1.4ruby 3.1.1
我的应用程序在Heroku上我的assets/images目录中有几个映像,但是当我部署到live时,我无法显示其中的一些映像。应用程序中的其他图像显示,所以我打赌牧场这是一个代码的东西对我的一部分。所有图像都显示在我的本地机器上。
该应用程序将assets/images/badges/中的图像与Badge模型中的image_name进行匹配。目前,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 %>

作为对show视图的测试,我为我知道存在的一个图像创建了一个图像标记。

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

它显示,所以我回到帮助页面,并打赌行:if Rails.application.assets.find_asset(image_path) != nil不是我认为它应该工作的方式。
有没有更好的方法来测试assets/images/badges/目录中的图像文件。
感谢您的任何帮助!

dm7nw8vv

dm7nw8vv1#

我发现这是可行的:

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...。奇怪!!但我猜它知道如何导航到正确的路径。

相关问题