0

私は単純なフォームを持っています:

<%= form_for [current_user, @bookcase], :id => "shelf_update_form", :remote => true, :html => { :multipart => true} do |f| %>
  <input id="bookcase_image" class="file" type="file" name="bookcase[image]" size="13">
<% end %>

ファイルが選択されると、自動的にアップロードされます。

$("#shelf_update_form").change(function() {
  $("#shelf_update_form").submit();
});

update アクションで js ビューをレンダリングしたいのですが、デフォルトでは代わりに html をレンダリングします。次のようにjsをレンダリングするように強制しようとします:

respond_to do |format|
  format.js
end

しかし、その後、次のエラーが発生します。

NetworkError: 406 Not Acceptable

それでも、私のログは次のように報告します。

Processing by BookcasesController#update as HTML

代わりにJSとして処理するにはどうすればよいですか?

アップデート:

景色:

triggerAjaxHistory("<%= @href %>", false);

より一般的なビューでも同じ結果が得られます。

alert("I work now!")
4

1 に答える 1

0
  1. コントローラーで、

    respond_to do |format|
      format.js if request.xhr?
    end
    
  2. ビューの名前は.js.erb?

  3. ブラウザで firebug を使用して、応答として正確に何が得られているかを確認できますか? ネット ログをオンにして、応答を確認します。
  4. また、あなたのレイアウトには次のものがありますか?

    <%= javascript_include_tag :defaults %>
    <%= csrf_meta_tag %>
    
  5. logger.info whatever_messageコントローラー アクションが実行され、正しいビューに移動することを確認するコマンドを入力できますか?
  6. コントローラーでjs形式を具体的に指定するとどうなりますか

     class UserController < ApplicationController
       respond_to :js, :only => :update, :layout => 'false`
    
  7. form_forフォーマットを次のように指定するとどうなりますか:format => :js
  8. フォームが別のフォーム内にネストされていますか?
于 2012-10-31T21:47:54.523 に答える