我是Rails开发的新手,我不明白如何在浏览器中嵌入PDF文件。我已经找过其他类似的问题了,我惊呆了。已经改变了所有的答案,但它就是不起作用。
这是我的功能
# create pdf function
def pdf
menu_pdf = File.join(Rails.root, 'app/assets/files/menulq2.pdf')
send_file(menu_pdf, filename: 'menulq2.pdf.pdf', disposition: 'inline', type: 'application/pdf')
end
现在我不知道下一步该做什么。
您链接到的SO答案是关于从您的服务器下载/发送PDF文件。您需要进一步向下滚动以了解如何在HTML视图中显示pdf。
没有理由在你的模型中有一个SomeModel#pdf
方法,除非每个记录链接到一个特定的PDF(例如,如果模型是Restaurant
,你有一个PDF菜单为每个restaurant
)。
你可以直接使用HTMLembed
标签:
<embed src="http://example.com/the.pdf" width="500" height="375" type="application/pdf">
只要"app/assets/files"的路径在资产管道中,您可以使用asset_path
助手:
<embed src="<%= asset_path('menulq2.pdf') %>" width="500" height="375"
type="application/pdf">
这里的好处是,如果你的资产被预编译,文件名可能会从menulq2.pdf
更改为menulq2-60aa4fdc5cea14baf5400fba1abf4f2a46a5166bad4772b1effe341570f07de9.pdf
,在这种情况下,你作为开发人员,实际上不知道PDF的文件名实际上是什么。
因此,asset_path
帮助器允许您指定简单的文件名,而不必担心资产复杂性可能对名称做了什么。
如果这太繁琐,或者您知道该资产没有得到预编译,您可以将其硬编码到HTML:
<embed src="/assets/files/menulq2.pdf" width="500" height="375"
type="application/pdf">
要硬编码URL,您需要通过在环境文件(/config/environments/*.rb
)中将其设置为true
来确保提供静态文件:
For Rails 4:config.serve_static_files = true
For Rails 5+:config.public_file_server.enabled = true