一、需求
希望每次进入一个网站的主页时显示不同的背景图
二、实现效果
image三、思路
1.将图片放在rails中的app/assets/images目录下,或者在public目录下新建background目录,然后放置图片
2.建立helper方法,实现随机获取目录中图片,并取得图片的路径
3.将获取的图片路径传递给image_tag或src,从而显示图片
四、实现步骤
将图片放在app/assets/images目录下和放在public目录下,代码所有不同,以下是这两种方案的具体实现步骤
(一)方案1:将图片放在app/assets/images目录
1.放置图片
将图片放在rails中的app/assets/images目录下
2.建立helper方法
module WelcomeHelper
def random_background_image
#遍历图片所在的目录,获取文件的路径,形成数组
file_names = Dir.entries("app/assets/images")
#去除目录中的这些非图片文件
useless_lists = [".","..",".keep"]
useless_lists.each do |list|
file_names.delete(list)
end
#随机获取目录中一个图片的路径
random_image = file_names.sample
end
end
不需要的文件,在调用Dir.entries方法时,一眼便能认出:
image
所以只需要去掉即可。
3.在视图中显示获取的图片
<%= image_tag random_background_image %>
(二)方案2:在public目录下新建background目录,然后放置图片
1.放置图片
将图片放在public/background目录下
2.建立helper方法
module WelcomeHelper
def random_background_image
#遍历图片所在的目录,获取文件的路径,形成数组
file_names = Dir.entries("public/background")
#去除目录中的这些非图片文件
useless_lists = [".","..",".DStore"]
useless_lists.each do |list|
file_names.delete(list)
end
#随机获取目录中一个图片的路径
random_image = file_names.sample
#拼接路径
return "background/#{random_image}"
end
end
3.在视图中显示获取的图片
<img src="<%= random_background_image %>" />
五、对比
两种方案在获取图片路径方案有所不同,这是因为:
- image_tag方法的参数可以是图片的url,也可以是assets目录下的内容的路径,但如果不是这两种情况则会出现错误。所以public目录下的图片不能直接使用image_tag去调用,而是改用img标签。
- public目录下的文件在调用时,不需要加上public这一层的路径,否则会找不到文件,因此我们这里是从public下一层的background层级开始对图片路径进行拼接,这样img标签的src属性就能找到图片了。
如果想要具体image_tag的参数、src属性、以及绝对路径和相对路径等概念,建议google搜索,然后去实践,从而获得更深层次的理解。
六、思考
在遍历目录中的文件时,我们使用的是Dir.entries方法,而不是Dir.glob方法,主要是考虑到案例中调用图片时所需的路径格式是相对路径而不是绝对路径。
建议读者自行查阅两个方法的使用方式和差异性。
网友评论