Ruby on rails rails—从url获取id,然后将其作为创建对象的参数传递

Ruby on rails rails—从url获取id,然后将其作为创建对象的参数传递,ruby-on-rails,Ruby On Rails,首先,我想问一下在创建表单中单击submit按钮后如何重定向。我有一个创建测验的表单,在他们点击提交后,我想将他们重定向到链接'quick/:id/add_question',其中:id是刚创建的测验的id,但我只是被重定向到/quizzes,这会导致浏览器中出现“连接重置”错误 这是我的测验表格: <div> <h2>Create Quiz</h2> <%= form_for(@quiz) do |f| %> <div>

首先,我想问一下在创建表单中单击submit按钮后如何重定向。我有一个创建测验的表单,在他们点击提交后,我想将他们重定向到链接'quick/:id/add_question',其中:id是刚创建的测验的id,但我只是被重定向到/quizzes,这会导致浏览器中出现“连接重置”错误

这是我的测验表格:

<div>
<h2>Create Quiz</h2>
<%= form_for(@quiz) do |f| %>
    <div>
        <%= f.label :name %>
        <%= f.text_field :name %> </br>

        <%= f.label :subject %>
        <%= f.text_field :subject %>
    </div>
    <%= f.submit "Submit" %>
<% end %>
</div>

创建测验

我的测验管理员:

class QuizzesController < ApplicationController
    def new 
        @quiz = Quiz.new
    end

    def create
        @quiz = Quiz.new(quiz_params)
        flash[:success] = "Quiz Created successfully" if @quiz.save
        redirect_to 'quiz/' + @quiz.id.to_s + '/add_question'
    end 

    private

    def quiz_params
        params.require(:quiz).permit(:name, :subject)
    end
end
class-QuizzesController
quick/:id/add_question链接指向一个问题创建表单:

<div>
<%= form_for(@question) do |f| %>
    <%= f.label :question %></br>
    <%= f.text_field :question %></br>

    <%= f.label :answer1 %></br>
    <%= f.text_field :answer1 %></br>

    <%= f.label :answer2 %></br>
    <%= f.text_field :answer2 %></br>

    <%= f.label :answer3 %></br>
    <%= f.text_field :answer3 %></br>

    <%= f.label :answer4 %></br>
    <%= f.text_field :answer4 %></br>

    <%= f.label :correct_id %></br>
    <%= f.text_field :correct_id %></br>

    <%= f.submit "Add question" %>
    <% end %>
</div>














我问题的另一部分是,如何在这里传递另一个参数来创建问题对象。我不希望用户输入该参数,因为该参数应该是当前url中的id(quick/:id/add_question)。

首先,我认为您犯了拼写错误:

redirect_to 'quiz/' + @quiz.id.to_s + '/add_quesiton'
应该是

redirect_to 'quiz/' + @quiz.id.to_s + '/add_question'
但是,您应该使用可用的url帮助器

redirect_to quiz_add_question_path(@quiz.id)
假设这是路线的名称。您可以通过运行
rake routes

例如,对于当前测验的id,可以设置隐藏属性

<%= f.hidden_field :quiz_id, value: params[:id] %>

首先,我认为你犯了一个拼写错误:

redirect_to 'quiz/' + @quiz.id.to_s + '/add_quesiton'
应该是

redirect_to 'quiz/' + @quiz.id.to_s + '/add_question'
但是,您应该使用可用的url帮助器

redirect_to quiz_add_question_path(@quiz.id)
假设这是路线的名称。您可以通过运行
rake routes

例如,对于当前测验的id,可以设置隐藏属性

<%= f.hidden_field :quiz_id, value: params[:id] %>


我修复了拼写错误,当我查看路线时,它仍然将我重定向到“/quizzes”,我的/quick/:id/add_question没有前缀。隐藏字段有效,谢谢!你能分享你的routes.rb文件吗?我修复了拼写错误,当我查看我的路线时,它仍然将我重定向到“/quizzes”,我的/quick/:id/add_question没有前缀。隐藏字段有效,谢谢!您可以共享routes.rb文件吗?