загрузить несколько файлов через контроллер, используя скрепку и рельсы - PullRequest
1 голос
/ 27 декабря 2011

Я использовал следующие уроки:

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, но я не уверен, насколько это поможет.

Есть мысли? Спасибо!

1 Ответ

0 голосов
/ 09 марта 2012

@ Раймонд, просто поместите последний фрагмент кода внутри _form.html.erb, соответствующий вашим visual_submissions.Просто убедитесь, что вы поместили его перед <% = f.submit%>, внутри form_for, конечно.Надеюсь, это поможет,

...