2016-12-30 4 views
-1

Я пишу приложение Ruby on Rails 5. Я просто научился загружать изображение без использования paperclip, carrierwave или refile. Я использовал refile в прошлом, но для этого приложения, я хотел узнать, как это сделать с этими сторонними драгоценными камнями. И это было не так сложно. Я успешно загрузил файл. Моя проблема заключается в доступе к изображению после этого! Я думал, это будет довольно просто. Но нет!Rails: доступ к файлам изображений после их загрузки

Я файлы изображений, загруженные на «/public/images/page/image.jpg»

Я добавил «/ Public/изображения/страницы» на пути активов в приложение/инициализаторах/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". Я все еще в режиме разработки, поэтому я думал, что путь к изображению будет правильным.

Каков правильный способ доступа к изображению, который был просто загружен в каталог за пределами конвейера активов? Это будет работать в разработке или производстве? Я действительно думал, что это будет прямо.

+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 и Nagasaki)

0

Вам не нужно указывать полный путь к изображению в пределах image_tag, вы просто указываете имя изображения в подкаталоге, если оно существует.

Итак, попробуйте <%= image_tag "#{@page.image}", class: 'pic left' %>.

И, пожалуйста, ознакомьтесь подробнее о конвейере активов. http://guides.rubyonrails.org/asset_pipeline.html

Смежные вопросы