2016-06-23 8 views
0

Ich habe derzeit eine Controller-Methode, die 1 auf ein Attribut erhöht und dann sollte es auf eine bestimmte Seite mit diesem Benutzer weitergeleitet werden. Aber aus einem Grund kann ich nicht herausfinden, dass es die else-Anweisung und das Ende der Methode weitergibt. Ich poste meinen Code und klärere dann alles auf, sobald du es siehst.Controller-Methode nicht richtig umleiten

REGLER:

def search 
    @subscriber = Subscriber.new 
    end 

    def visit 
    @subscriber = Subscriber.find_by_phone_number(params[:phone_number]) 
    if @subscriber 
     @subscriber.visit ||= 0 
     @subscriber.visit += 1 
     @subscriber.save 
     flash[:notice] = "Thank You #{@subscriber.first_name}. You have #{@subscriber.days_till_expired} until renewal" 
     redirect_to subscribers_visit_path(:subscriber) 
    else 
     render "search" 
    end 
    end 

VIEW:

<h1>Hello Subscriber</h1> 

<% if @subscriber %> 
    <tr> 
    <td><%= image_tag avatar_url(@subscriber) %></td> 
    <td><%= @subscriber.first_name %></td> 
    </tr> 
<% else %> 
    <tr><td>No subscriber found!</td></tr> 
<% end %> 

aus irgendeinem Grunde hält die „Suche“ in dem anderen Teil des Verfahrens zu machen und nicht die subscriber_visit_path aber es macht den += 1 Teil nur fein. Also, im Grunde ist es den Abonnenten zu finden, aber nachdem es inkrementiert scheint es den Abonnenten zu gehen nil? Fehle ich etwas Offensichtliches hier?

+0

Woher wissen Sie, dass es "+ = 1" Teil ist? – Andy

Antwort

1

Ich stimme dem Kommentar von Mr Bass zu - haben Sie Tests, um sicherzustellen, dass der Prozess funktioniert?

Besonders die if @subscriber.

Ich könnte versuchen, die eingebaute exists? in Ihrer if-Anweisung verwenden, dies garantiert ein wahres oder falsches Ergebnis.

+0

Das ist überflüssiger Code; 'if @ subscriber' würde in diesem Fall genau dasselbe tun. – Andy

+0

Nun, ich bin nur ein leicht fortgeschrittener Anfänger, aber wenn ich in meine Rails-Konsole gehe und nach einem bestimmten Datensatz nach ID suche, und die ID nicht existiert, gibt es nicht 'nil' zurück - es gibt ein großes altes zurück ActiveRecord: RecordNotFound-Fehler. Ich weiß nicht, dass Schienen Fehler als nil behandelt? – MageeWorld

+0

Ich kann nicht überprüfen, was Sie gesagt haben, da ich gerade keine Rails zur Hand habe, aber Sie müssen das 'byebug'-Juwel in die': development,: test'-Gruppe Ihres Gemfile and run '-Bündels legen '. Dann setze 'byebug' in die Zeile nach der Zeile' @subscriber = Subscriber.find_by ... etc'. Dann feuern Sie Ihren Rails Server an und gehen Sie auf Ihre Besuchsseite. Wenn alles pausiert, geh zurück zu deiner Befehlszeile und du wirst sehen, dass byebug alles angehalten hat und du kannst mit dem Code spielen. Geben Sie '@ subscriber' ein und sehen Sie, was zurückgegeben wird. – Andy