在最后按钮之前禁止提交表单-避免编辑页面

Prevent form being submitted until final button - avoid edit page

本文关键字:表单 编辑页面 提交 禁止 最后 按钮      更新时间:2024-06-28

我知道SO上有很多类似的问题,但我还没有找到一个适合我尝试做的问题

目前,我有一个页面,根据"测试"中的"问题"数量创建了几个表单标签,如下所示:

<div class="jumbotron">
  <% @test.questions.each do |question| %>
  <div class="panel panel-info">
    <div class="panel-heading">
      <h3 class="panel-title">Question <%= question.question %></h3>
    </div>
    <div class="panel-body">
      <p>
        <%= image_tag question.image.url(:medium) %>
      </p>
      <%= form_tag edit_test_testsession_path(@test, question.testsessions), id: 'submit_answer' do %>
        <%= radio_button_tag :answer, "A" %> A
        <%= radio_button_tag :answer, "B" %> B
        <%= radio_button_tag :answer, "C" %> C
        <%= radio_button_tag :answer, "D" %> D
        <%= submit_tag 'Submit', class: "btn btn-success", id: 'single_submit' %>
      <% end %>
    </div>
  </div>
  <% end %>
  <br/>
  <%= link_to "See Test Results!", results_path(@test), class: "btn btn-lg btn-info btn-block", id: "submit_all" %>
</div>

目前我已经禁用了"提交"按钮,因为我不希望在所有表单都完成之前真正提交表单,所以我有了这个Javascript:

$(document).ready(function() {
  $('.btn.btn-success').click(function(e) {
    e.preventDefault();
    this.value="Resubmit";
  });
  $('#submit_all').click(function(){
    $('#submit_answer').each(function(){
      $(this).submit();
    });
  });
});

它确实试图提交答案,但仍然试图将用户带到编辑页面,但有几个[:id],这显然不起作用。。。

在我的测试会话控制器中,我有这样的:

class TestsessionsController < ApplicationController
  def new
    @test = Test.find(params[:test_id])
    @testsession = Testsession.new
    redirect_to action: :create
  end
  def create
    @test = Test.find(params[:test_id])
    @test.questions.each do |question|
      @test.testsessions.create user: current_user, question: question
    end
    redirect_to action: :index
  end
  def index
    @test = Test.find(params[:test_id])
    @questions = @test.questions
    # @testsession = Testsession.find(params[:id])
  end
  def show
    @testsession = Testsession.find(params[:id])
    @test = Test.find(params[:test_id])
    @questions = @test.questions
  end
  def update
    @testsession = Testsession.find(params[:id])
    # @question = Question.find(params[:question_id])
    @testsession.update(params.require(:testsession).permit(:answer))
    redirect_to action: :results
  end
  def edit
    @testsession = Testsession.find(params[:id])
    @question = Question.find(params[:question_id])
    @testsession.update(params.require(:testsession).permit(:answer))
    redirect_to action: :results
  end
  def results
    @test = Test.find(params[:id])
    @testsession = Testsession.find(params[:id])
  end
end

是否有任何方法可以强制最后一个链接将其直接带到结果页面,但仍然提交form_tags中的信息?

目前它只是给我一个错误:

No route matches [POST] "/tests/1/testsessions/%23%3CTestsession::ActiveRecord_Associations_CollectionProxy:0x007fe197a72e40%3E/edit"

只有当我按下后退按钮时,我才能进入结果页面。。。

编辑

配置/路由文件:

Rails.application.routes.draw do
  devise_for :users
  root 'welcome#index'
  get 'tests/:id/testsessions/new' => 'testsessions#create'
  get 'tests/:id/testsessions/results' => 'testsessions#results', as: :results
  resources :tests do
    resources :questions
    resources :testsessions
  end
end

Upd我想你的意思是:

 <%= form_tag edit_test_testsession_path(@test, @testsession), id: 'submit_answer' do %>

问题似乎就在这里:

 <%= form_tag edit_test_testsession_path(@test, question.testsessions), id: 'submit_answer' do %>

您传递的是所有相关联的测试会话的集合,而不是单个对象,我怀疑这是否是您想要做的

请显示与控制器相关的config/routes.rb的一部分