使用Dir.glob列出Rails 3.1中的资产?

时间:2011-11-04 13:35:11

标签: ruby-on-rails-3.1 asset-pipeline

我正在尝试使用/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"):

我在这里做错了什么?在此先感谢您的帮助!

1 个答案:

答案 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