2016-09-29 3 views
0

Ich arbeite an einer Beispiel-Rails-App, die Benutzer, Ereignisse (die der Benutzer erstellt) hat, und schließlich können Benutzer diese Ereignisse abonnieren/teilnehmen.Rails-Ansicht wird nicht aktualisiert nach redirect_to

Ich habe eine Tabelle, in der Benutzer Ereignisse abonnieren und abmelden können, wenn sie auf eine link_to-Schaltfläche in der Ereigniszeile klicken. Das link_to ruft eine Methode vom event_controller auf, die eine Umleitung zum current_path hat, aber wenn ich auf die Schaltfläche klicke, passiert nichts mit der Ansicht, aber es scheint, dass der Server die Ansicht rendert.

Ist dies, weil ich es vom event_controller aufrufen, aber mit dem Show-Controller von User?

LOG:

Rendered users/show.html.erb within layouts/application (17.1ms) 

Benutzer> show.html.erb

<% if current_user?(@user) %> 
     <td><%= link_to "Delete", e, method: :delete, 
         data: { confirm: "You sure?" } %></td> 
    <% else %> 
     <% if attendingEvent?(current_user, e.id) %> 
      <td><%= link_to "Not Going", events_remove_event_to_attend_path(event_id: e.id, event_owner_id:@user.id, current_path:request.fullpath), remote: true %></td> 
     <% else %> 
      <td><%= link_to "I Want To Go", events_add_event_to_attend_path(event_id: e.id, event_owner_id:@user.id, current_path:request.fullpath), remote: true %></td> 
     <% end %> 
    <% end %> 

events_controller.rb

def add_event_to_attend 
    puts attend_params 
    puts request.fullpath 
    @attend = Attendee.new 
    @attend.event_id = (attend_params[:event_id]) 
    @attend.user_id = current_user.id 
    if @attend.save 
     flash[:success] = "You created an assocations" 
     redirect_to(attend_params[:current_path]) 
     puts 'saved' 
    else 
     flash[:danger] = "You did not create the event" 
     puts 'not saved' 
    end 
    end 

    def remove_event_to_attend 
    @event_to_delete = Attendee.find_by_user_id_and_event_id(current_user.id,params[:event_id]) 
    @event_to_delete.destroy 
    redirect_to(attend_params[:current_path]) 
    end 
+0

Hallo und willkommen zu Stack Overflow. Also ... ich bemerke, dass Sie einige 'puts' in Ihren Code geschrieben haben ... was sehen Sie in den Serverprotokollen/Terminalbildschirm? Zweitens: Was hast du in deinen rjs-Vorlagen? Sie haben Rjs Vorlagen richtig? Sie haben die Links remote gemacht - was bedeutet, dass Sie eine js-Anfrage senden und der Browser wird nur seine Ansicht ändern, wenn Sie ihm eine js zurücksenden, die ihn dazu auffordert. Alternativ können Sie dies sehr schnell beheben, indem Sie "remote: true" von den Links entfernen, und dann wird die Umleitung einfach funktionieren ... –

Antwort

1

Hallo und willkommen Überlauf zu stapeln.

Also zuerst ... Ich bemerke, dass Sie einige put ses in Ihrem Code haben ... was sehen Sie in der Server-Protokolle/Terminal-Bildschirm?

Zweitens: Was haben Sie in Ihren rjs Vorlagen? Sie haben Rjs Vorlagen richtig? Sie haben die Links remote gemacht - was bedeutet, dass Sie eine js-Anfrage senden und der Browser wird nur seine Ansicht ändern, wenn Sie ihm eine js zurücksenden, die ihn dazu auffordert.

Alternativ können Sie dies sehr schnell beheben, indem Sie remote: true von den Links entfernen, und dann wird die Umleitung einfach funktionieren ... weil es nicht mehr eine js-Anfrage und nur eine normale Anfrage ist.

+1

Vielen Dank Taryn! Es sieht so aus, als wären die RJs ein Relikt aus einer früheren Iteration! Vielen Dank! Ich werde deine Antwort so schnell wie möglich annehmen! – got2jam

0

Ich bin neu in Ruby on Rails.

Ich möchte Taryns Antwort etwas hinzufügen. Vielleicht, wenn Sie redirect_back fallback_location: asd_path verwenden, asd_path ist der Name des Pfades der gleichen Seite (nicht für die gleiche Aktion), könnte es funktionieren.

Ich hoffe, das hilft, und willkommen in Rails! Ich bin auch ein Neuling, aber Schienen ist einfach zu erlernen! Und ich < 3 Ruby, Liebe auf den ersten Blick.

Kurzer Hinweis: Ich verwende Rails 5, wenn Sie nicht das gleiche verwenden, funktioniert es möglicherweise nicht. Check in Rails docs (Überprüfen Sie die gleiche Version, die Sie verwenden)