我使用了以下教程:
本教程将指导您通过控制器而不是静态文件下载文件。我这样做是为了控制对文件的访问。
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控制器,这是不会触及的。我不完全确定我是否正确地问这个问题,但我被困住了。我的一个想法是创建一个资产控制器并将图像方法移动到那里,但我不确定它会有多大帮助。
有什么想法? 谢谢!
答案 0 :(得分:0)
@Raymond,只需将最后一个代码段放在与您的visual_submissions对应的_form.html.erb中。当然,请确保将其放在form_for中的&lt;%= f.submit%&gt;之前。希望有所帮助,