2012-01-05 161 views
0

我正在使用ajax文件上傳腳本上傳照片並使用回形針在導軌中處理該照片。使用回形針上傳Ajax文件

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

腳本有一個變量名「qqfile」硬編碼爲上傳文件名,所以獲得通過的PARAMS是

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。

有什麼明顯的,我在這裏做錯了嗎?

回答

3

最後我得到了解決這個問題的辦法。這是一個常見的解決方案。首先下載the js code並將其保存爲jquery.form.js在assets/javascripts中。包含在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的樣子。我認爲它可以幫助你。對於任何查詢請評論相同的線程。謝謝。