2017-07-17 1 views
1

Ich lerne Ajax von Zeit zu Zeit, die übrigens großartig ist, also bin ich nicht wirklich ein Experte davon. Also brauche ich einen Ratschlag.Ändern Sie eine partielle mit AJAX

Ich baue gerade ein Gruppensystem. Ich habe ein Tab-System, um Ihre eigenen Gruppen und die anderen zu unterscheiden. Was ich versuche zu wissen, ist ein Ajax zu schreiben, um meine Teilgruppe von einem Reiter zum anderen zu schicken. Zum Beispiel, wenn der Benutzer eine Gruppe beendet, wird es von meinen Gruppen verschwinden, um in der Registerkarte andere angezeigt zu werden.

Ich bin der erste Schritt gelungen, aber ich weiß nicht wirklich, wie ich das Formular in die andere Registerkarte senden kann. Wie Sie unten sehen können, habe ich versucht, die ID zu senden, aber es gibt keine Teilform include. Es wird nur die ID meiner Gruppe gerendert. Irgendwelche Ratschläge, die Teil (_group2.html.erb) enthalten?

Mein Code:

Index (Gruppe):

<div class="panel-body"> 
    <div class="tab-content"> 
     <div class="tab-pane fade in active" id="tab1default_group" style="padding:0px;"> 
     <div class="group_area"> 
      <% @my_groups.each do |group| %> 
      <div class="group_box<%=group.id%>"> 
       <%= render 'group', group: group %> 
      </div> 
      <% end %> 
     </div> 
     </div> 
     <div class="tab-pane fade in" id="tab2default_group" style="padding:0px;"> 
     <div class="group_area2"> 
      <% @groups_out.each do |group| %> 
      <div class="group_box2<%=group.id%>"> 
       <%= render 'group2', group: group %> 
      </div> 
      <% end %> 
     </div> 
     </div> 
    </div> 
    </div> 

rem_req.js.erb (Gruppe):

$(".group_box<%[email protected]%>").fadeOut(); 
$(".group_area2").append('<%= render partial: @group2 %>'); 

Groups_controller:

def rem_req 
    if @group.groupes_admin.count == 1 && @group.groupes_admin.where(user_id: current_user).any? 
     flash[:error] = "Vous devez définir un nouvel Admin ou supprimer ce groupe" 
    else 
     RemReqGroupJob.perform_later(current_user, @group) 
     flash[:error] = "Vous ne faites plus parti de #{@group.name}" 
     @group2 = Group.where(id: @group.id).last 
    end 
    respond_to do |format| 
     format.html { redirect_back } 
     format.js 
    end 
    end 

Und wenn ich versuche, dies zu laufen, ich habe diesen Fehler:

ActionView::Template::Error ('nil' is not an ActiveModel-compatible object. It must implement :to_partial_path.): 

Antwort

0

Ich gehe davon aus, den glücklichen Fall Ihnen Richtung zu geben. Ich denke, dass Sie in der Nähe sind, aber Sie müssen einige

Vom

<% @groups_out.each do |group| %> 
    <div class="group_box2<%=group.id%>"> 
    <%= render 'group2', group: group %> 
    </div> 
<% end %> 

ersten Schritt <div class="group_box2<%=group.id%>">..</div> auch in group2 Teil Schnipsel zwicken machen.

Dann ersetzen $(".group_area2").append('<%= render partial: @group2 %>'); durch $(".group_area2").append('<%= j(render(partial: "group2")) %>');