2017-12-31 3 views
0

Ich bin etwas neu bei Rails, und ich lerne von einem Tutorial online. Der Typ in den Videos sprach darüber, wie man eine if-Anweisung haben muss, um zu entscheiden, ob das Speichern funktioniert oder nicht.Create Function Not Redirecting

Dies ist mein Code:

def create 
    @quiz = Quiz.new(quiz_params) 
    if @quiz.save 
    flash[:notice] = "Your quiz has been created." 
    redirect_to action: 'index' 
    else 
    render('new') 
    end 
end 

Die quiz_params als solche definiert wurde:

params.require(:quiz).permit(:title, :summary, :visible) 

Aus irgendeinem Grund, sie weigert sich, die Indexfunktion zu umleiten, auf der gleichen Seite zu bleiben, zu entscheiden während sich die URL von localhost:3000/quizzes/new zu localhost:3000/quizzes ändert.

Der Typ, der das Tutorial lehrte, hatte diesen Code.

def create 
    @subject = Subject.new(subject_params) 
    if @subject.save 
    flash[:notice] = "Subject created succesfully." 
    redirect_to(subjects_path) 
    else 
    render('new') 
    end 
end 

Die subject_params als solche ging:

params.require(:subject).permit(:name, :position, :visible) 

Anders als die Formulierung in Anführungszeichen und der Name des Modells und Variablen, ich bin nicht sicher, was der Unterschied ist. Ich bin so konsequent wie möglich, also sollte es keinen Unterschied geben.

Entschuldigung, wenn die Formatierung schlecht ist.

Antwort

0

Sie können laufen rake routes auf Ihrem command prompt dann sehen sie, was die index_path ist, wenn zu redirect zur Homepage bekam dann

schreiben
redirect_to root_path #=> Or root_url 

Oder wenn Ihr Controller QuizzesController ist dann index Weg ist quizzes_path

redirect_to quizzes_path #=> Use instead of redirect_to action: 'index' 

Oder wenn Sie haben articles/index dann

redirect_to articles_path 

Hoffnung

+0

Es gerade neu macht und ändert die URL, auch nach einer Rake läuft Routen. Es bleibt aus irgendeinem Grund auf der neuen Vorlage, während es zu/Quiz geht. – Jraokmepala

+0

Haben Sie "remote: true" auf dem Formular verwendet? –

+0

Was meinst du? – Jraokmepala

0

Ihre Validierung fehlschlägt und es macht ‚neue‘ Sicht zu helfen. während Aktion bleibt zu schaffen.

Wenn Rake-Routen angezeigt werden, entspricht diese Route Localhost: 3000/Quiz, um eine Aktion zu erstellen.

Sie können für Details verweisen this.

0

können Sie byebug verwenden, um die Anfrage zu debuggen und zu sehen, ob der Code redirect_to aufruft oder nicht. es könnte eine Ajax-Form sein, wie @Fool sagte. Überprüfen Sie das Formularobjekt in der Ansicht, wenn es remote: true Attribut hat, löschen Sie es und versuchen Sie es erneut.

0

Sie sollten uns Rails und Ruby-Version sagen. Wie auch immer ich verwende Rails 5+ und ich denke, die Syntax

Render('new') 

ist alt oder veraltet. Was ich normalerweise mache ist das.

def create 
    plan = Plan.new plan_params 
    plan.delivered = 0 
    plan.user_id = params['u_id'] 
    if plan.save 
      flash[:OK] = 'Il nuovo piano e\' stato salvato con successo!' 
    else 
      flash[:err] = 'Siamo spiacenti ma non siamo riusciti a registrare il tuo piano, ricontrolla i dati inseriti!' 
      flash[:errors] = plan.errors.messages 
    end 
    redirect_to plans_users_path(User.find(params['u_id'])) 
end 

Also mein Rat ist versuchen, benannte Pfade statt Strings zu verwenden.

0

ändern unterhalb der Linie in der Steuerung:

redirect_to action: 'index' 

mit

redirect_to "/quizzes" 

So sei der Code wie:

def create 
    @quiz = Quiz.new(quiz_params) 
    if @quiz.save 
    redirect_to "/quizzes", notice: "Your quiz has been created." 
    else 
    render 'new' 
    end 
end 
Verwandte Themen