2017-02-22 5 views
0

リモートでフォームを介してユーザコントローラの更新アクションを呼び出す:true。私は、ビューで更新されたユーザのHTMLをレンダリングしたいので、私は、コントローラでこのコードを持っている:Rails 5 - Ajaxでモデルを更新し、リクエストレスポンスhtmlをビューに追加する

def update 
    @user = User.find(params[:id]) 
    respond_to do |format| 
    if @user.update_attributes(user_params) 
     format.html { 
     flash[:success] = "Profile updated" 
     redirect_back fallback_location: @user 
     } 
     format.js { render partial: 'user', locals: { user: @user } } 
    else 
     format.html { render 'show' } 
     format.js {} 
    end 
    end 
end 

それは罰金、サーバは問題は私のcoffescriptである正確なレンダリングされたHTMLとステータス200で応答動作します:

$ -> 
    $(".edit_user[data-remote]").on "ajax:success", (e, data, status, xhr) -> 
    console.log(e) 
    console.log(data) 
    console.log(status) 
    console.log(xhr) 
    $(this).closest('tr').fadeOut() 
    if $(this).data('action') == 'hire' 
     $('#active-users').append data 
    else 
     $('#archive-users').append data 

このコードは実行されず、理由はわかりません。コントローラのcoffescriptからrender partial: 'user', locals: { user: @user }を取り除くと、(私はもちろんこのレンダリングされたhtmlが必要です)見つけました。

coffescriptを正しく実行するにはどうすればよいですか?私はJSとCoffeScriptにはかなり新しいです。

答えて

1

'remote:true'を使用すると、対応するコントローラーアクションのJavaScriptファイルが自動的に実行されます。この場合は、ユーザーの「更新」です。 ajaxをバインドする別のファイルを持つ必要はありません:成功かそのようなもの。

だから、最初の変更:

format.js { render partial: 'user', locals: { user: @user } } 

へ:

format.js {} 

はその後、ファイルビュー/ユーザー/ update.js.erbを作成し、そのファイル内にこれを追加します。

$('#active-users').append('<%= j render partial: 'user', locals: { user: @user } %>') 

'j'はHTMLの出力をエスケープし、Javascriptはエラーをスローしません。コントローラのアクションが完了すると、partialの内容が#アクティブユーザーに追加されます。もちろん、このファイルに必要なJavascriptを追加することもできます。

+0

ありがとうございました! それは私のために働いた:) – Ptr

関連する問題