最简单的方法是创建一个重定向到随机图像的操作,浏览器将遵循重定向。
应用程序/控制器/background_controller.rb
class BackgroundController < ApplicationController
def image
redirect_to "/assets/images/background_#{rand(10)}.jpg"
end
end
这将随机重定向到 和 之间的背景background_0.jpg
图像background_9.jpg
配置/路由.rb
Something::Application.routes.draw do
…
get '/random_background.jpg', to: 'background#image'
…
end
css
html{
background: url(/random_background.jpg) no-repeat center center fixed;
}
一些更高级的方法是在中间件中执行类似的操作,因此这样的请求不需要如此完整的 rails 堆栈。
应用程序/中间件/random_background_middleware.rb
class RandomBackgroundMiddleware
def initialize(app, count = 10)
@app = app
@count = count
end
def call(env)
if env["PATH_INFO"] == "/random_background.jpg"
[302, {"Location" => "/assets/images/background_#{rand(@count)}.jpg")}, '']
else
@app.call(env)
end
end
end
config/application.rb
config.middleware.insert_before 0, "RandomBackgroundMiddlware"
insert_before 0
用于将其放置在 Middleware-Chain 的顶部
或者更好的是在你的网络服务器配置中是这样的。但我不知道如何或是否可以做到这一点。