我正在尝试使用Prawn将本地存储的图像渲染为PDF。这就是我在课堂上所做的......
def to_pdf
cover = book.cover_url
text cover
image cover
render
end
..期望它渲染图像路径,然后是图像本身。但我得到的是一个ArgumentError,它让我回到路径,“找不到/system/images/image.jpg”,这实际上是在我将其粘贴到地址栏时向我显示的图像。 book.cover_url
输出相对路径作为字符串。此路径是正确的 - 如果我在视图中使用相同的代码,则会显示图像。
这也不起作用:
cover = "#{Rails.root}#{book.cover_url}"
image cover
这给我一个类似的错误(如预期的那样):
cover = "#{Rails.root}#{book.cover_url}"
image open(cover)
然而,这确实有效:
cover = "http://localhost/system/images/image.jpg"
image open(cover)
就像这样:
cover = "http://ecx.images-amazon.com/images/I/41EPYSumZvL._SX329_BO1,204,203,200_.jpg"
image open(cover)
Prawn似乎无法使用它提供的路径找到图像。这让我疯了。从文档来看,这应该都非常简单。
答案 0 :(得分:0)
Rails.root
为您提供rails应用程序位于文件系统上的文件路径 - 这与文件的URL无关。您应该改写您的.cover_url
以提供绝对URL并创建一个输出相对路径的.cover_path
方法。 (这与路径和资产助手在rails中的工作方式更为一致。)
如果您的图片可通过资源管道获取,则可以使用url_to_image
。