2016-10-15 32 views
2

我的routes.rb:form_tag + file_field_tag使控制器響應format.html?

post 'home/review' 

我home_conrtoller.rb:

def review 
    @review = Review.new(review_params) 
    @review.image = params[:review][:image] 
    if @review.save 
    respond_to do |format| 
     format.js { render 'review', locals: {review_name: @review.review_name, review_body: @review.review_body} } 
    end 
    else 
    format.html { respond_to root_path} 
    end 
end 

private 
def review_params 
    params.require(:review).permit(:review_name, :review_body, :image) 
end 

我review.js:

$(function() { 
    var theHTML = []; 
    theHTML.push('somewhat'); 
$(".wrap-body").append(theHTML.join('')); 
}); 

我index.html.erb

<%= form_tag home_review_path, :method => 'post', :multipart => true, :remote => true do %> 
    <%= text_area_tag 'review[review_body]'%> 
    <%= text_field_tag 'review[review_name]'%> 
    <%= file_field_tag 'review[image]' %> <==== problem !!! 
    <%= submit_tag 'Send'%> 
<%end %> 

問題:如果我想補充的index.html.erb <% = file_field_tag 'review [image]'%>,軌道拋出一個錯誤:

ActionController :: UnknownFormat in HomeController#review

但如果場<% = file_field_tag 'review [image]'%>在index.html.erb軌沒有回報review.js!

如何更改始終導航的home_controller.rb中的index.html.erb或操作返回review.js永不重新加載頁面?

對不起,我的英語((

回答

1

也許在remote形式使用文件上傳時因爲你,但我會建議使用Remotipart寶石,它僅使用remote: true形式軌內置了AJAX文件上傳不是一個直接的解決方案,rails退回到HTML提交 PS:我不確定我是否完全解決了您的問題,這可能不是解決問題的具體方法。

0

您無法提交帶有遠程true選項的文件,

$("#send").click(function() {   
    var fd; 
    fd = new FormData(document.getElementById("reviewForm")); 
    $.ajax({ 
     url: "/home/review", 
     type: "POST", 
     data: fd, 
     processData: false, 
     contentType: false 
    }); 
}); 
0

我解決了這個問題,如下所示:

我home_conrtoller.rb:

def review 
    @review = Review.new(review_params) 
    if @review.save 
    render json: {review_name: @review.review_name, review_body: @review.review_body, review_image: @review.image.url} 
    else 
    respond_to root_path 
    end 

private  
def review_params 
    params.require(:review).permit(:review_name, :review_body, :image) 
    end  
end 

我review.js

$(function() { 
    "use strict"; // Start of use strict 
    $('#form_review').ajaxForm({ 
     success: SubmitSuccesful 
    }); 
}); 

function SubmitSuccesful(responseText) { 
    var theHTML = []; 
    theHTML.push('<img src="'+ responseText.review_image+'">'); 
    $(".wrap-body").append(theHTML.join('')); 
} 

和我的index.html.erb,刪除「:遠程= > true「

<%= form_tag home_review_path, :method => 'post', :multipart => true do %> 
    <%= text_area_tag 'review[review_body]'%> 
    <%= text_field_tag 'review[review_name]'%> 
    <%= file_field_tag 'review[image]' %> 
    <%= submit_tag 'Send'%> 
<%end %> 

result:form(file and text_fields)send('post'metho d)控制器。控制器以JSON格式回答。回調函數收到事件「成功」,並更新HTML無重載頁面。