我使用rails 6.1.4
和ruby 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/
目录中的图像文件。
感谢您的任何帮助!
1条答案
按热度按时间dm7nw8vv1#
我发现这是可行的:
注意:Heroku上的
Rails.root
显示app-name/app
,所以当我在视图中打印出来时,上面的Rails.root.join('app','assets','images','badges',image_name)
显示app/app/assets...
。奇怪!!但我猜它知道如何导航到正确的路径。