使用paperclip和rails通过控制器上传多个文件

时间:2011-12-27 18:21:42

标签: ruby-on-rails paperclip

我使用了以下教程:

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

所以,正如我上面所说,上传就好了。有一点是不同但预期的,当它存储文件时,它使用资产模型中的ID。这一切都很好,但是,我现在无法正确获取URL。我为我的图像创建了一条路线:

resources :visual_submissions do
  member do
   get :images
 end
end

这就是我的路线。

images_visual_submission GET /visual_submissions/:id/images(.:format) {:action =&gt;“images”,:controller =&gt;“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控制器,这是不会触及的。我不完全确定我是否正确地问这个问题,但我被困住了。我的一个想法是创建一个资产控制器并将图像方法移动到那里,但我不确定它会有多大帮助。

有什么想法? 谢谢!

1 个答案:

答案 0 :(得分:0)

@Raymond,只需将最后一个代码段放在与您的visual_submissions对应的_form.html.erb中。当然,请确保将其放在form_for中的&lt;%= f.submit%&gt;之前。希望有所帮助,