我正在尝试使用/app/assets/images
命令从Dir.glob()
目录中的子目录中随机选择一个图像,然后使用image_tag
显示它。不知怎的,我无法让它发挥作用。
这是我的代码:
- @badges = Dir.glob("app/assets/images/badges/*")
= image_tag @badges.sample
产生以下错误:
ActionController::RoutingError (No route matches [GET] "/assets/app/assets/images/badges/produce.png"):
正如您所见,资产管道正在目录前插入“/ assets”。好吧Rails,我会在这里见到你。接下来我尝试从查询路径中删除/app/assets
以使其工作并获得以下结果:
- @badges = Dir.glob("images/badges/*")
= image_tag @badges.sample
ActionController::RoutingError (No route matches [GET] "/assets"):
我在这里做错了什么?在此先感谢您的帮助!
答案 0 :(得分:7)
Dir.glob
将返回带有相对路径的图片,因此您的produce.png
文件将返回为:
`app/assets/images/badges/produce.png`
但是,您只需将badges/produce.png
部分传递给image_tag
。你需要在此之前删除这些东西:
= image_tag @badges.sample.gsub("app/assets/images/", "")
您可能希望将其添加到帮助程序中:
def random_badge
badges = Dir.glob("app/assets/images/badges/*")
image_tag badges.sample.gsub("app/assets/images/", "")
end
然后在你看来:
= random_badge