Какой смысл использовать опцию url с помощью paperclip? Опция: путь фактически изменяет местоположение, где файл сохраняется, но параметр: url, похоже, ничего не делает. Он работает только тогда, когда указывает на общедоступное местоположение файла. В этот момент URL-адрес уже доступен для всех. Если я изменил URL-адрес, чтобы он не соответствовал пути, он не работает. Насколько я могу судить, он не создает никаких маршрутов в любом случае. Здесь что-то не хватает. В чем смысл этого варианта? Кажется слишком запутанным, чтобы кто-то указал: url, фактически не создавая маршрут.Скрепка: url не создает Маршруты
ответ
Я нашел 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
должны указывать на то же местоположение, чтобы визуализировать изображение успешно.
Если я могу указать только указатель ': url' на маршрут, который уже существует, в чем смысл? Как использовать эту опцию? Если есть уже маршрут, разве моя работа не выполнена? – wdhilliard
@ wdhilliard Я обновил свой ответ с лучшим объяснением. По существу ': url' сообщает папке, где можно получить доступ к вашим изображениям. ': path' сообщает paperclip, где загружать изображения.Они должны совпадать, чтобы сделать изображение успешно –
Я думаю, что мое замешательство было связано с тем, что я не использовал Paperclip для создания URL-адреса для меня. Спасибо за подробный ответ. – wdhilliard