我一直在寻找一种使用
Paperclip和
jQuery fileupload设置Ruby on Rails 3.1的方法.查看
jQuery fileupload页面的教程,我得到了系统设置,但我找不到一种方法来使回形针处理上传的文件.
这就是我的(简而言之):
# model has_attached_file :photo ... # view = form_for @user,:html => {:multipart => true} do |f| f.file_field :photo,:multiple => true f.submit # controller def create @user = User.new params[:user] if @user.save render :json => [...] end
如果我检查提交的数据,我得到params [:user]和params [:user] [:photo]中的所有用户属性,它是ActionDispatch :: Http :: UploadedFile.当@ user.save被调用时,图像不会被处理或保存.
一个线索,教程或解决方案将不胜感激!
解决方法
在这个问题困扰了一段时间后,我发现问题出现在:multipart =>因为表单域名从用户[photo]更改为用户[photo] [],因此将true添加到f.file_field.
使用单独的页面附加照片
我想要有一个单独的页面上传多个文件到一个记录(另一个用于编辑用户的属性).这看起来像我的临时解决方案,但它的作品.而不是f.form_field:photo,:multipart => true我使用form_field_tag’user [photo]’,:multiple =>在视野中真实.
我的代码如下所示:
## app/model/user.rb has_attached_file :photo def to_fileupload_json { "name" => photo_file_name,"size" => photo_file_size,... } end ## app/views/photos/new.html.haml = form_for @user,:url => users_path,:html => { :multipart => true } do |f| #fileupload = file_field_tag 'user[photo]',:multiple => true = f.submit = javascript_include_tag "jquery.fileupload.js" # require all other JS files needed for the plugin (jQuery,jQuery UI,...) = stylesheet_link_tag "jquery.fileupload-ui.css" = render :partial => "jquery_file_templates" # partial with jQuery templates for responses :javascript $(function () { uploader = $('#fileupload').fileupload() } ## app/controllers/users_controller.rb def create @user = User.create params[:user] end
使用fields_for
根据应用程序的结构,您可以考虑使用fields_for.
在这种情况下,您必须:
将accept_nested_attributes_for:照片添加到(用户)模型中
>添加一个方法photos_attribues =(属性)到您的(用户)模型,并处理记录创建
>在用户的新方法中创建照片的时间记录3.times {@ user.photos.build}
例:
def photos_attribues=(attributes) attributes.each do |key,value| photo = Photo.create :photo => value,... end end
免责声明:上述代码被简化/重写,使其更容易理解.我可能会在删除不需要的东西时犯错误.再次 – 我并不确定这是解决这个问题的正确方法.建议和改进是更受欢迎!