创建功能不重定向

时间:2017-12-31 04:01:28

标签: ruby-on-rails

我对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)

出于某种原因,它拒绝重定向到索引功能,当网址从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)

除了引号中的措辞以及模型和变量的名称外,我不确定区别是什么。我尽可能地保持一致,所以不应该有任何区别。

如果格式错误,请抱歉。

5 个答案:

答案 0 :(得分:0)

您可以在rake routes上运行command prompt,然后他们会看到index_path如果到redirect到主页然后写

redirect_to root_path #=> Or root_url

或者,如果您的控制器为QuizzesController,那么您的index路径为quizzes_path

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

或者如果你有articles/index那么

redirect_to articles_path

希望能提供帮助

答案 1 :(得分:0)

您的验证失败并呈现新的'视图。虽然行动仍有待创造。

如果你看到rake路线,这条路线对应localhost:3000 / quizzes来创建动作。

您可以参考this答案了解详情。

答案 2 :(得分:0)

您可以使用byebug调试请求,看看代码是否正在调用redirect_to。 @fool说,它可能是一个ajax形式。检查视图中的表单对象是否具有remote: true属性,删除它并重试。

答案 3 :(得分: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

所以我的建议是尝试使用命名路径而不是字符串。

答案 4 :(得分:0)

更改控制器中的以下行:

redirect_to action: 'index'

redirect_to "/quizzes"

所以代码如下:

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