2014-10-06 6 views
0

Какой смысл использовать опцию url с помощью paperclip? Опция: путь фактически изменяет местоположение, где файл сохраняется, но параметр: url, похоже, ничего не делает. Он работает только тогда, когда указывает на общедоступное местоположение файла. В этот момент URL-адрес уже доступен для всех. Если я изменил URL-адрес, чтобы он не соответствовал пути, он не работает. Насколько я могу судить, он не создает никаких маршрутов в любом случае. Здесь что-то не хватает. В чем смысл этого варианта? Кажется слишком запутанным, чтобы кто-то указал: url, фактически не создавая маршрут.Скрепка: url не создает Маршруты

ответ

2

Я нашел this post, полезный при понимании разницы между :path и :url.

  • :path устанавливает каталог в приложении, в котором хранится файл.
  • :url устанавливает URL-адрес, который пользователи могут использовать для доступа к изображению.

Вы правы, скрепка не создает для вас маршрут. Однако опция :url дает вам возможность выбрать, какой (существующий) маршрут может использовать ваш пользователь для загрузки определенного изображения.

:path и :url обычно идут рука об руку. Если вы придерживаетесь paperclip :default_url, путь уже настроен для вас. Просто нажмите URL, и все будет хорошо работать.

Изменение расположения файла

В этом примере я рендеринга аватарки пользователей:

<%= image_tag @user.avatar.url %> 

Теперь, позволяет сказать, что вы хотите изменить расположение, изображения сохраняются, вы можете добавить следующий код к вашей модели:

has_attached_file :avatar, 
    :path => "public/system/:class/:id/:filename" 

Однако изображение не будет удаляться успешно. Это связано с тем, что новый путь, где хранятся ваши изображения, не соответствует :default_url. Таким образом, необходимо будет также указать новый URL-адрес:

has_attached_file :avatar, 
    :path => "public/system/:class/:id/:filename" 
    :url => "/system/:class/:id/:basename.:extension" 

Теперь URL изображения соответствует расположению, что файл хранится на сервере, а изображение делает успешно.

Путь против URL

Подводя итог, :url говорит скрепку, где О Нас на сервере, чтобы искать изображения. :path сообщает папке, где загружать изображение при создании или обновлении записи.

Оба :path и :url должны указывать на то же местоположение, чтобы визуализировать изображение успешно.

+0

Если я могу указать только указатель ': url' на маршрут, который уже существует, в чем смысл? Как использовать эту опцию? Если есть уже маршрут, разве моя работа не выполнена? – wdhilliard

+0

@ wdhilliard Я обновил свой ответ с лучшим объяснением. По существу ': url' сообщает папке, где можно получить доступ к вашим изображениям. ': path' сообщает paperclip, где загружать изображения.Они должны совпадать, чтобы сделать изображение успешно –

+0

Я думаю, что мое замешательство было связано с тем, что я не использовал Paperclip для создания URL-адреса для меня. Спасибо за подробный ответ. – wdhilliard