Ruby on Rails:随机显示图像

时间:2013-09-05 17:30:15

标签: ruby-on-rails image conditional-statements

我正在尝试根据与“价格”相关的if / else语句显示一个图像。我的/ assets / images目录中有5个文件夹,如下所示:

very_bad
bad
ok
good
very_good

每个文件夹包含多个图像,我想随机从相应的文件夹中抓取一个图像,因此用户不必总是看到相同的图像。

例如,如果价格低于-2%,我会想要从“very_bad”文件夹中随机显示图像。如果价格大于2%,我会想要从“very_good”文件夹中随机显示一张图片。

你会如何解决这个问题?谢谢你的帮助!

4 个答案:

答案 0 :(得分:10)

确定文件夹名称后(让我们以very_good为例),根据您拥有的图像数量确定一个随机数。假设每个文件夹中有四个图像,使用rand(4)[0,1,2,3]中获取一个随机数。在每个文件夹中为您的图片命名0.png1.png等。现在,您应该能够在给定文件夹名称的情况下随机显示其中一个图像,如下所示:

<%= image_tag "very_good/#{rand(4)}.png" %>

由于您的文件夹名称可能是动态的,因此它看起来更像是:

<%= image_tag "#{@folder_name}/#{rand(4)}.png" %>

答案 1 :(得分:8)

这是一个没有重命名图像的解决方案。

了解文件夹后,请执行此操作以随机选择该文件夹中的图片:

=image_tag Dir.new(Rails.root.to_s + "/app/assets/images/my-folder").to_a.select{|f|    f.downcase.match(/\.jpg|\.jpeg|\.png/) }.sample

答案 2 :(得分:4)

您可以使用Dir.glob和数组.sample.split方法轻松完成此操作。

假设我在Rails图像资源文件夹中名为./backgrounds的文件夹中包含所有随机图像:

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 %>

这应该导致生成随机图像的图像标记。小心注意前导和尾随斜杠。

答案 3 :(得分:0)

这是tina和bevan的答案的组合

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')) %>