2

私のroutes.rb:

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 %>

<% = file_field_tag 'review [image]'%>問題: index.html.erbを追加する と、Rails はエラーをスローします:

ActionController :: HomeController の UnknownFormat#review

しかし、index.html.erb レールのフィールド<% = file_field_tag 'review [image]'%>が no を返した場合は、review.js !!!

レールが常にreview.jsを返し、ページをリロードしないhome_controller.rbのindex.html.erbまたはアクションを変更するにはどうすればよいですか?

私の英語でごめんなさい((

4

3 に答える 3

1

直接的な解決策ではないかもしれませんが、Remotipartremote: true gem を使用することをお勧めします。フォームでファイルのアップロードを使用する場合remote、レールは HTML 送信にフォールバックするため、フォームを使用してレールで ajax ファイルをアップロードするためにのみ構築されます。PS: 私はあなたの問題を完全に理解しているかどうか確信が持てません.これは正確な問題の解決策ではないかもしれません.

于 2016-10-15T07:25:34.290 に答える
0

remote true オプションを使用してファイルを送信することはできません。以下を試してください。

$("#send").click(function () {        
    var fd;
    fd = new FormData(document.getElementById("reviewForm"));
    $.ajax({
        url: "/home/review",
        type: "POST",
        data: fd,
        processData: false,  
        contentType: false 
    });
});
于 2016-10-15T07:31:29.043 に答える