2016-12-30 85 views
-1

我正在编写一个Ruby on Rails 5应用程序。我刚刚学会了如何上传图片,而不使用回形针,载波或重定向。我过去曾经使用过重复函数,但是对于这个应用程序,我想学习如何去做那些第三方的宝石。这并不难。我已经成功上传了一个文件。我的问题是之后访问图像!我认为这会很简单。但不是!Rails:上传后访问图像文件

我有图像文件被上传到“/public/images/page/image.jpg”

我已经加入“/公/图片/页”在应用程序/初始化/ 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' %> 

与标签基本相同,得到的结果相同。还尝试过:

<img class="pic left" src='<%= image_path "#{@page.image}" %>' /> 

仍然会出现路由错误,但只能查看“/ images”目录。我仍然处于开发模式,所以我认为image_path将是正确的路径。

访问图像的正确方法是什么?刚刚上传到资产管道以外的目录?这将在开发或生产环境中工作?我真的认为这将是直截了当的。

+0

您正试图访问上传的静态图像,您不能使用资产管道。我将删除您添加到assets.rb的设置,并直接指向图像路径:'Rails.root.join('public','image','mars01.jpg').to_s' – Mat

回答

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和长崎)

0

您不必在image_tag内提供完整的图像路径,只需将图像名称与子目录一起存在即可。

因此请尝试<%= image_tag "#{@page.image}", class: 'pic left' %>

请阅读有关资产管道的更多信息。 http://guides.rubyonrails.org/asset_pipeline.html