渲染到具有相对路径的字符串

时间:2013-09-30 08:47:23

标签: ruby-on-rails ruby zip

我的下载拉链有问题。它工作正常,但构建方法呈现html文件并提供类似的链接:

 <script src="/assets/impress.js?body=1" type="text/javascript"></script>

而我需要它是相对路径:

<script src="assets/impress.js?body=1" type="text/javascript"></script>

如何使用ruby删除链接开头的'/'。这是使用zip gem的代码部分。

  def download
    build
    data = render_to_string :build
    js_path = Rails.root.join("vendor", "assets", "javascripts")

    zip = Zip::OutputStream.write_buffer do |out|
      out.put_next_entry("index.html")
      out.write(data)

      out.put_next_entry("assets/impress.js")
      out.write File.read js_path.join("impress.js")

    end
    zip.rewind
    binary_zip = zip.sysread

    send_data(binary_zip, {filename: "impress.zip"})
  end

1 个答案:

答案 0 :(得分:1)

我有一个解决你的相对路径问题的方法。如果要生成index.html文件的内容,则可以替换生成内容中的路径。

data = render_to_string :build有一行#48。在下面的行中,它只是用相对版本("/")替换所有"./"起始路径,如下所示:

data.gsub!('<script type="text/javascript" src="/', '<script type="text/javascript" src="./')
data.gsub!('<link href="/', '<link href="./')

然后你应该让它工作。如果你想对图像也这样做,只需实现类似的替换规则。