med*_*rts 4 image paperclip ruby-on-rails-3.1
所以我在我的rails 3.1 app中使用paperclip,
我使用关系将图像添加到项目中,这样我每个项目可以有多个图像.
我想要做的是能够单击浏览按钮并使用单个字段选择多个文件.而不是每次都要为每个场一次拍摄一张图像.
任何人都知道如何做到这一点,或有一个很好的选择,这样做不需要Flash插件?
我只使用一个控制器,没有任何关联(我只是将多个图像上传到一个图库),但我已经成功地做了你所要求的.您将需要调整它以适应您的关系,但它对我来说很有用(虽然在IE中不起作用),但我确信它会破坏一些rails惯例,但这是我能够构建的唯一方法.功能.
第一步是使用HTML5多标记将upload字段设置为接受多个文件:
<%= f.file_field :photo, multiple: 'multiple' %>
Run Code Online (Sandbox Code Playgroud)
或者,如果你像我一样使用simple_form:
<%= f.input :photo, input_html: { multiple: 'multiple' } %>
Run Code Online (Sandbox Code Playgroud)
下一步是更改创建控制器操作以接受和处理多个文件.这是我确信有些人会反对的,但是,嘿,它有效!
def create
params[:photo][:photo].each do |photo|
@params = {}
@params['photo'] = photo
@photo = Photo.new(@params)
if !@photo.save
respond_to do |format|
format.html { redirect_to new_photo_path, error: 'An error occured uploading.' }
end
end
end
respond_to do |format|
format.html { redirect_to photos_path, notice: 'Photos were successfully uploaded.' }
end
end
Run Code Online (Sandbox Code Playgroud)
它比它看起来更简单 - 对我来说控制器名称是photo,因此是字段名称,这解释了params[:photo][:photo].它基本上只取得:photo请求的属性(控制器通常期望一个文件)并迭代上传的文件,Photo为每个文件创建一个新的,并依次设置每个文件的photo属性,@params然后尝试将其保存为Photo如果发生错误则发出新警报,否则一旦完成,它将重定向以显示照片.
正如我所说,这对我很有用,我希望它对你也有帮助:)
编辑如果这没有帮助,你能告诉我原因吗?在有人花时间帮助之后忽略这条消息并不会让其他人想要帮助你.