【问题标题】:Create Function Not Redirecting创建函数不重定向
【发布时间】:2018-06-10 21:56:00
【问题描述】:

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

由于某种原因,它拒绝重定向到 index 函数,决定在 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)

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

如果格式不好,请见谅。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您可以在您的command prompt 上运行rake routes,然后他们会看到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
    

    希望能帮到你

    【讨论】:

    • 它只是呈现新的并更改 URL,即使在运行 rake 路由之后也是如此。出于某种原因,它在转到 /quizzes 时保留在新模板上。
    • 您在表单上使用过“remote: true”吗?
    • 什么意思?
    • 如果您在表单上使用remote: true 进行ajax 请求,那么我认为有一些问题,但如果您确实使用了,那么您需要调试create 操作代码我认为create 方法不是如果保存日期则保存数据然后redirect_to quizzes_path 工作如果不保存数据则render new 操作
    • 但是我会把遥控器放在哪里:真的
    【解决方案2】:

    您的验证失败并呈现“新”视图。而行动仍有待创造。

    如果您将看到 rake 路由,则此路由对应于 localhost:3000/quizzes 以创建操作。

    详情可以参考this的回答。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        在控制器中更改以下行:

        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
        

        【讨论】:

          【解决方案5】:

          您应该告诉我们 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
          

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

          【讨论】:

            猜你喜欢
            • 2023-03-18
            • 1970-01-01
            • 2023-03-23
            • 2011-04-10
            • 2021-02-10
            • 1970-01-01
            • 2018-06-13
            • 2021-01-30
            • 1970-01-01
            相关资源
            最近更新 更多