【问题标题】:upload multiple files through controller using paperclip and rails使用回形针和导轨通过控制器上传多个文件
【发布时间】:2011-12-27 18:21:41
【问题描述】:

我用过以下教程:

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=>"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 方法移到那里,但我不确定这会有多大帮助。

有什么想法吗? 谢谢!

【问题讨论】:

标签: ruby-on-rails paperclip


【解决方案1】:

@Raymond,只需将最后一个代码 sn-p 放入与您的 visual_submissions 对应的 _form.html.erb 中。当然,请确保将它放在 之前,在 form_for 中。希望对你有帮助,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2014-10-16
    • 2012-06-10
    • 2012-07-30
    • 1970-01-01
    相关资源
    最近更新 更多