【问题标题】:Using Dir.glob to list assets in Rails 3.1?在 Rails 3.1 中使用 Dir.glob 列出资产?
【发布时间】:2011-11-04 13:35:11
【问题描述】:

我正在尝试使用Dir.glob() 命令从我的/app/assets/images 目录中的子目录中随机选择一个图像,然后使用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"):

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

【问题讨论】:

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


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2011-12-20
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 2012-02-04
      • 1970-01-01
      相关资源
      最近更新 更多