我对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)
除了引号中的措辞以及模型和变量的名称外,我不确定区别是什么。我尽可能地保持一致,所以不应该有任何区别。
如果格式错误,请抱歉。
答案 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)
答案 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