我正在尝试根据与“价格”相关的 if/else 语句显示一张图像。我的 /assets/images 目录中有 5 个文件夹,如下所示:
very_bad
bad
ok
good
very_good
每个文件夹包含多个图像,我想随机从适当的文件夹中抓取一张图像,因此用户不必总是看到相同的图像。
例如,如果价格低于 -2%,我想随机显示“very_bad”文件夹中的图像。如果价格大于 2%,我想随机显示“very_good”文件夹中的图像。
你会如何解决这个问题?谢谢您的帮助!
我正在尝试根据与“价格”相关的 if/else 语句显示一张图像。我的 /assets/images 目录中有 5 个文件夹,如下所示:
very_bad
bad
ok
good
very_good
每个文件夹包含多个图像,我想随机从适当的文件夹中抓取一张图像,因此用户不必总是看到相同的图像。
例如,如果价格低于 -2%,我想随机显示“very_bad”文件夹中的图像。如果价格大于 2%,我想随机显示“very_good”文件夹中的图像。
你会如何解决这个问题?谢谢您的帮助!
一旦您确定了文件夹名称(让我们very_good
用作示例),请根据您拥有的图像数量确定一个随机数。假设您在每个文件夹中有四个图像,用于rand(4)
在[0,1,2,3]
. 在每个文件夹中命名您的图像0.png
、1.png
等。现在您应该能够随机显示其中一张图像,给定文件夹名称,如下所示:
<%= image_tag "very_good/#{rand(4)}.png" %>
由于您的文件夹名称可能是动态的,它看起来更像这样:
<%= image_tag "#{@folder_name}/#{rand(4)}.png" %>
这是一个无需重命名图像的解决方案。
一旦您知道您的文件夹,请执行此操作以在该文件夹中随机选择一张图片:
=image_tag Dir.new(Rails.root.to_s + "/app/assets/images/my-folder").to_a.select{|f| f.downcase.match(/\.jpg|\.jpeg|\.png/) }.sample
Dir.glob
您可以使用, 和数组.sample
和.split
方法很容易地做到这一点。
假设./backgrounds
我的 Rails 图像资产文件夹中的一个文件夹中有所有随机图像:
app/assets/images/
└── backgrounds
├── beach.jpeg
├── bright-flowers-pink-skies.jpeg
├── fall-autumn-red-season.jpg
└── fjord.jpeg
我可以创建一个助手./app/helpers/application_helpers.rb
——或者你想放置助手的任何地方——它具有以下代码:
module ApplicationHelper
def get_random_image
image_path_prefix = "app/assets/images/"
image_files = Dir.glob("#{image_path_prefix}backgrounds/*")
image_files.sample.split(image_path_prefix)[1]
end
end
这样做是全局化 内的所有路径./app/assets/images/backgrounds
,返回一个随机路径(使用.sample
),通过拆分字符串删除图像路径前缀,并返回它的结尾部分。
然后在您的 ERB 模板中,您可以像这样显示图像:
<%= image_tag get_random_image %>
这应该会导致生成随机图像的图像标签。小心注意前导和尾随斜杠。
这是蒂娜和贝文的答案的组合
module ImageHelper
def random_image(folder)
image_path_prefix = "app/assets/images/"
image_files = Dir.new("#{image_path_prefix}#{folder}")
.to_a.select { |f| f.downcase.match(/\.jpg|\.jpeg|\.png/) }
image = image_files.sample
"#{folder}/#{image}"
end
end
像这样使用它
<%= asset_path(random_image('good/really_good')) %>