Я использовал следующие уроки:
http://patshaughnessy.net/2009/5/16/paperclip-sample-app-part-2-downloading-files-through-a-controller
Из этого туториала вы узнаете, как загружать файлы через контроллер, а не как статические файлы. Я сделал это, чтобы контролировать доступ к файлам.
http://emersonlackey.com/article/paperclip-with-rails-3
Из этого туториала Вы узнаете, как создать модель для ваших файлов и использовать ее для многократной загрузки файлов.
Итак, по большей части загрузка прошла нормально, но проблема в загрузке.
Немного предыстории. У меня есть следующие ключевые модели.
class VisualSubmission < ActiveRecord::Base
has_many :assets
accepts_nested_attributes_for :assets, :allow_destroy => true;
end
class Asset < ActiveRecord::Base
belongs_to :visual_submission
has_attached_file :image, :styles => { :original => "100%", :large => "600x600>", :small => "150x150>", :thumb => "50x50>"}, :convert_options => {:all => "-auto-orient"},
:path => ':rails_root/secure/system/:attachment/:id/:style/:basename.:extension',
:url => '/:class/:id/:attachment?style=:style'
end
Для загрузки файлов через контроллер создается действие:
def images
visual_submission = VisualSubmission.find(params[:id])
style = params[:style] ? params[:style] : 'original'
send_file visual_submission.image.path(style), :type => visual_submission.image_content_type, :disposition => 'inline'
end
Так что, как я уже сказал выше, загрузка в порядке. Одна вещь, которая отличается, но ожидается, когда он сохраняет файл, он использует идентификатор из модели активов. Это все хорошо, но сейчас у меня проблемы с получением правильного URL. Я создал маршрут к своим изображениям:
resources :visual_submissions do
member do
get :images
end
end
А вот так выглядит мой маршрут.
images_visual_submission GET /visual_submissions/:id/images(.:format) {: action => "images",: controller => "visual_submissions"}
Теперь кусок кода, который теоретически должен получить доступ к изображению.
Это из моей формы редактирования. Предполагается показать текущие сохраненные изображения.
<%= f.fields_for :assets do |asset_fields| %>
<% unless asset_fields.object.new_record? %>
<p>
<%= asset_fields.object.image.url %>
</p>
<% end %>
<% end %>
Теперь это явно не сработает. Я не уверен, что объект делает здесь, но я знаю, что мои изображения должны проходить через мой контроллер visual_submissions, который это не касается. Я не совсем уверен, правильно ли я задаю эти вопросы, но я застрял. У меня была идея создать контроллер ресурсов и перенести туда метод images, но я не уверен, насколько это поможет.
Есть мысли?
Спасибо!