2011-12-27 80 views
1

我已經使用了以下教程:上傳多個文件使用回形針和軌道

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){:行動=> 「圖像」,:控制器=> 「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控制器,這是不觸及的。我不完全確定,如果我正確地問這個問題,但我卡住了。我有一個想法是創建一個資產控制器,並將圖像方法移到那裏,但我不知道這會有多大幫助。

有什麼想法? 謝謝!

+0

這可以幫助你 http://stackoverflow.com/questions/11605787/uploading-multiple-files-with-paperclip/19379756#19379756 – devudilip 2013-10-15 11:14:45

回答

0

@Raymond,只需將最後一個代碼片段放入與您的visual_submissions對應的_form.html.erb中。當然,只要確保你把它放在form_for中的<%= f.submit%>之前。希望幫助,