我正在编写Ruby on Rails 5应用程序。我刚刚学会了如何在不使用paperclip,carrierwave或refile的情况下上传图像。我过去曾使用过refile,但是对于这个应用程序,我想学习如何使用这些第三方宝石。这并不难。我已成功上传了一个文件。我的问题是之后访问图像!我觉得这很简单。但不是!
我将图像文件上传到“/public/images/page/image.jpg”
我已将“/ public / images / page”添加到app / initializers / assets.rb中的资源路径
我试过这样的直接img标签:
<img class="pic left" src="/public/images/page/mars01.jpg" alt="Mars01" />
我得到一个“(没有路由匹配[GET]”/public/images/page/mars01.jpg“)”错误。 我试过了:
<%= image_tag "/public/images/page/#{@page.image}", class: 'pic left' %>
与tag完全相同,得到相同的结果。还尝试过:
<img class="pic left" src='<%= image_path "#{@page.image}" %>' />
仍然出现路由错误,但只查看“/ images”目录。我仍然处于开发模式,所以我认为image_path将是正确的路径。
访问图像的正确方法是什么,只是上传到资产管道之外的目录?那将在开发或生产环境中起作用吗?我真的认为这是直截了当的。
答案 0 :(得分:0)
您不必在image_tag
内提供图像的完整路径,只需将图像名称与子目录一起提供即可。
请尝试<%= image_tag "#{@page.image}", class: 'pic left' %>
。
请阅读有关资产管道的更多信息。 http://guides.rubyonrails.org/asset_pipeline.html
答案 1 :(得分:0)
以下是我最终为感兴趣的人做的事情。
在我的控制器中我这样做了:
# default to development go to app/assets/images
path = Rails.root.join('app', 'assets', 'images', uploaded_io.original_filename)
if ENV['RAILS_ENV'] == 'production'
# change only if in production to public/assets/images
Rails.root.join('public', 'assets', 'images', uploaded_io.original_filename)
end
File.open(path, 'wb') do |file|
file.write(uploaded_io.read)
end
基于RAILS_ENV;如果开发,图像将转到app / assests / images文件夹;如果在生产中他们去公共/资产/图像。
使用直接的image_tag:
<%= image_tag "#{@page.image}" %>
像魅力一样工作。至少我知道它适用于开发环境。 感谢那些回应的人。 (Mat和长崎)