2017-12-31 82 views
0

私はRailsには少し新しく、チュートリアルをオンラインで学んでいます。ビデオの男は、保存が有効かどうかを判断するためにifステートメントをどのようにしなければならないかについて話しました。リダイレクトしない関数を作成する

これは私のコードです:

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 

quiz_paramsは、このようなとして定義されたいくつかの理由

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

、それは同じページに滞在することを決定、インデックス機能にリダイレクトすることを拒否URLはlocalhost:3000/quizzes/newからlocalhost:3000/quizzesに変更されます。

チュートリアルを教えた人にこのコードがありました。

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

subject_paramsのような行ってきました:引用符で表現し、モデルと変数の名前以外

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

を、私は違いが何であるかわかりません。私はできる限り一貫しているので、違いはありません。

フォーマットが悪いと申し訳ありません。あなたは上のrake routesを実行することができます

答えて

0

あなたcommand promptその後、彼らはその後

redirect_to root_path #=> Or root_url 

を書いたり、お使いのコントローラがQuizzesControllerであるならば、あなたのindexパスがquizzes_path

あるホームページに redirectになった場合 index_pathであるかを見ます
redirect_to quizzes_path #=> Use instead of redirect_to action: 'index' 

articles/indexがある場合、

redirect_to articles_path 

希望

+0

redirect_to "/quizzes" 

redirect_to action: 'index' 

ようなので、コードがあることルート。何らかの理由で、/ quizzesに行く間に新しいテンプレートにとどまります。 – Jraokmepala

+0

フォームに「remote:true」を使用しましたか? –

+0

どういう意味ですか? – Jraokmepala

0

あなたの検証が失敗し、それが「新しい」ビューをレンダリングするのに役立ちます。一方で行動は残っています。

レーキルートが表示される場合、このルートはlocalhost:3000/quizzesに対応してアクションを作成します。

詳細はthisの回答を参照してください。

0

byebugを使用して要求をデバッグし、コードがredirect_toを呼び出すかどうかを確認できます。 @foolが言ったように、それはajax形式かもしれません。ビューのフォームオブジェクトにremote: true属性があるかどうかを確認し、削除してもう一度やり直してください。

0

RailsとRubyのバージョンを教えてください。とにかく私はRails 5+を使用していますが、構文と思います。

Render('new') 

古いか廃止予定です。私は通常これをしています。

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 

私の助言は、文字列の代わりに名前付きパスを使用しようとしています。コントローラ内の行の下に

0

変更:それだけでも、熊手を実行した後、新しいレンダリングするとURLが変更

def create 
    @quiz = Quiz.new(quiz_params) 
    if @quiz.save 
    redirect_to "/quizzes", notice: "Your quiz has been created." 
    else 
    render 'new' 
    end 
end 
関連する問題