使用paperclip上传Ajax文件

时间:2012-01-05 16:04:14

标签: jquery ruby-on-rails-3 mongoid paperclip ajax-upload

我正在使用ajax文件上传脚本上传照片并使用回形针在rails中处理该照片。

脚本是 http://valums.com/ajax-upload/

脚本的变量名称'qqfile'是硬编码的上传文件名,所以传递的参数是

qqfile=filename.jpg
在回形针中,我的图像对象被称为照片,所以回形针正在期待一个照片元素,我想!!!这就是造成我问题的原因。

我尝试了以下

1)在我的模型中,我尝试使用

将参数名称别名化为正确的对象名称
alias_attribute :qqfile, :photo

但是当我这样做时,回形针实际上并没有保存模型。

我删除了alias_attribute并尝试在我的控制器中提供别名

    def create
    new_photo = {photo: params[:qqfile]}

    @temp_photo = TempPhoto.new(new_photo);
     if @temp_photo.save
        return render :text => '{success:true}'
     else
        return render :text => '{success:false}'
     end
    end

通过此更改,模型将保存到数据库,但所有照片字段都为NULL。

任何明显我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

最后我得到了解决这个问题的方法。这是一种常见的解决方案。首先下载the js code并将其保存为assets / javascripts中的 jquey.form.js 。包含在application.js中,如

//= require jquery.form

接下来是您的观点。这可能看起来像这样

<div id="image_view">
  <%=image_tag @model.image_field.url %>
</div>

接下来是您上传图片的表单[您可以使用bootstrap modal呈现此表单。然后它会更漂亮]

<%=form_for @model, :html => { :multipart => true, :id => "form-id" }, :url => url_for(:controller => 'controller', :action => 'method_name') do | f | %>
 Upload picture : <%= f.file_field image_field %>
 <%= f.submit "Save changes", :id => :upload_pic %>
<% end %>

然后将一些javascript添加到表单呈现的文件

<script type="text/javascript">
  $(document).ready(function(){
    $('#upload_pic').click(function() {
      $("#edit_form").ajaxForm({ target: "#image_view" }).submit();
      return false;
   });
 }); 
</script>

控制器方法就像创建或更新方法

#image_view is just a div. where the response from ajax function can be loaded.

希望你们知道模型和Gemfile的外观。我想它可以帮助你。对于任何查询,请在同一个线程上发表评论。谢谢。