【问题标题】:question id is not updating according to the user_choice option问题 ID 未根据 user_choice 选项更新
【发布时间】:2022-06-28 00:10:35
【问题描述】:

希望你们一切都好

我正在创建一个测验应用程序,其中我有 3 个模型一个 question.rb、user.rb 和 result.rb

Question.rb

class Question < ApplicationRecord

    validates :question, presence: true
    validates :option1, presence: true 
    validates :option2, presence: true 
    validates :option3, presence: true 
    validates :option4, presence: true 
    validates :answer, presence: true


end

迁移的文件

class CreateQuestions < ActiveRecord::Migration[6.1]
  def change
    create_table :questions do |t|
      t.text :question
      t.text :option1
      t.text :option2
      t.text :option3
      t.text :option4
      t.text :answer

  
      t.timestamps
    end
  end
end

result.rb

class CreateResults < ActiveRecord::Migration[6.1]
  def change
    create_table :results do |t|
      t.text :user_choice

      t.timestamps
    end
  end
end

question_id 和 User_id 也是该表中的外键。

结果控制器

class ResultController < ApplicationController
  
       def create
            @result=Result.create(user_choice: params[:user_choice], 
            question_id: params[:question_id], 
            user_id: current_user.id)
    end
    
end

最后 查看/问题/索引

<div class="card o-hidden border-0 shadow-lg my-5">
    <div class="card-body ">
       <!-- Nested Row within Card Body -->
      <div class="row py-5">
          <div class="p-5">
          <div class="text-center">
       <h1 class="h4 text-gray-900 mb-4 ">Multiple-Choice Questions</h1>
        </div>

     
    <%= form_with model: @result ,url: result_path do |f| %>
   <% @questions.each do |question| %>
    <div>
        <%= f.hidden_field :question_id, value: question.id %>
          <%= f.hidden_field :user_id, value: current_user.id %>
        <p><%= question.question %></p>
        
        <% choices = [question.option1, question.option2, question.option3, question.option4] %>
        <% choices.each do |c| %>
            <div>
                <%= f.radio_button :"user_choice[#{question.id}]", c %>
                <%= f.label :user_choice, c  %>
            </div>
        <% end %>
    </div>&nbsp;&nbsp;
<% end %>
       <div class="sub"> <%= f.submit "Submit", class:"btn btn-primary" %></div>
<% end %>
<div class="para1"><%= link_to 'New Question', new_question_path,class:"btn btn-primary btn-user" %>
</div>
            </div>
        </div>
      </div>
     </div>
  </div>

现在一切正常,用户选择正在保存,用户 ID 也在保存 current_user.id

现在的问题是 question_id 没有更新它总是显示最后一个问题的 id。在我的事业中它是 11。我不知道为什么它不存储已回答问题的 id。

如果有人在这方面帮助我,我将不胜感激。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您正在为每个问题输出一个名为 question_id 的复选框,其中包含每个问题的 ID 值。这意味着您在页面上有 11 个相同的问题 ID 隐藏输入。当你这样做时,最后一个元素获胜。

    如果您想在页面上拥有多组同名的表单元素,您需要以某种方式限定它们的范围,以免它们发生冲突。您可以为此使用fields_for,我相信它会为每个元素添加一个唯一名称,即:

    <% @questions.each do |question| %>
      <%= f.fields_for question do |fq| %>
        <%= fq.hidden_field :question_id, value: question.id  %>
        ...
      <% end %>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-25
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      相关资源
      最近更新 更多