0

Rails 3.2でajaxを介して複数の部分を更新する方法 ここで私はajaxリクエストを行いました

$.ajax({
    url: "/home/create_entry",
    type: "POST",
    data: params,
    cache: false,
    success: function(data) {
        $('#'+did).html(data);
        //   $("#results").html('<%#=j render(:partial => 'explorer', :locals => {:entries => @entries, :entry_count=> @entry_count}) %>');
    }
});

コントローラーで書かれた

def create_entry
 if request.xhr?  
  @entry = Entry.new
  @entry.title = params[:title]
   respond_to do |format|
            if @entry.save
              flash[:notice] = "Entry created successfully"
              @entry = Entry.last
              @entries = Entry.where(:user_id => current_user.id).order(sort_column + ' ' + sort_direction)
              @entry_count = @entries.count
              format.js
            end
          end
    end

そして create_entry.js.erb で

<%= render :partial =>  'edit_entry_form', :locals => {:entry => @entry}%>
<%= render :partial =>  'explorer', :locals => {:entries => @entries}%>

両方のデータを取得できるようになりました。ajax リクエストの成功後に両方の部分を更新するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

0

最初に、AJAX 呼び出しを修正する必要があります。これは、サーバーの応答をページに追加するだけで評価する必要がないためです (Rails ではデフォルトで行われます)。

Javascript

$.ajax({
  url: "/home/create_entry",
  type: "POST",
  data: params,
  cache: false
});

次に、コントローラーを更新してロジックを実行し、パーシャルを正しくレンダリングするために必要なデータを取得します。

コントローラ

def create_entry
  if request.xhr?  
    # Create entry
    respond_to do |format|
      if @entry.save
        # Collect any data needed for view
        format.js
      end
    end
  end
end

ビューでは、jQuery と Rails JavaScript ヘルパーを使用して、パーシャルを HTML ドキュメントに置換/挿入します。

ビュー (create_entry.js.erb)

$("#edit_entry_form").replaceWith("<%= j(render('edit_entry_form', :entry => @entry)) %>");
$("#explorer").replaceWith("<%= j(render('explorer', :entries => @entries)) %>");

上記は、HTML ID#edit_entry_form#explorerが存在することを前提としています。

于 2013-01-08T19:02:04.243 に答える
0

jQuery を使用して、更新するページの領域にこれら 2 つのパーシャルのコンテンツを動的に挿入する方法を検討する必要があります。何かのようなもの:

$("#divforedit_entry_form").html("<%= escape_javascript(render 'edit_entry_form' :locals => {:entry => @entry})%>");

$("#divforexplorer").html("<%= escape_javascript(render 'explorer' :locals => {:entries => @entries})%>");
于 2013-01-05T16:50:21.040 に答える