Rails:随机选择图像作为背景图像

时间:2013-07-29 12:10:30

标签: ruby-on-rails asset-pipeline

我正在制作一个带有背景图片的页面,我想让背景图像自动更改。 图像已经保存在目录中。

一种可能的解决方案是设置一个BackgroundImage类,并将这些图像记录在数据库中,所以@backgroundimage = BackgroundImage.all.shuffle.first,然后在img_tag @backgroundimage

等视图页面中使用它

另一种方法是<img src='backgroundimages/image#{@random-number}>?我认为如果我将这些图像命名为image1,image2,并且每次在控制器中获取一个随机数,这是可能的。但它需要手动重命名图像。

2 个答案:

答案 0 :(得分:1)

您可以将图像放在一个文件夹中,然后读取所有文件名并返回一个随机图像名称,这样您就不需要命名模式或数据库支持的模型。像这样:

def random_image
  blacklist = [".", ".."]
  file_names = Dir.glob("/path/to/images/*")
  blacklist.each do |blacklsited|
    file_names.delete(blacklisted)
  end
  "/webserver/path/to/images/{files.shuffle.first}"
end

因此,在视图中,您可以调用辅助方法random_image

答案 1 :(得分:0)

试试这个

BackgroundImage.order("RAND()").limit(1)

取决于您的数据库,它可能是'RANDOM()'或类似的东西

它生成像这样的SQL查询

SELECT "background_images".* FROM "background_images" ORDER BY RAND() LIMIT 1