2

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

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

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

4

2 回答 2

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

于 2013-07-29T12:18:12.080 回答
1

试试这个

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

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

它生成这样的sql查询

SELECT "background_images".* FROM "background_images" ORDER BY RAND() LIMIT 1
于 2013-07-29T12:45:32.037 回答