我目前正在尝试构建一个向用户显示问题的视图,如果他们回答正确的问题,则允许用户选中一个复选框,该复选框发送请求以在数据库中保留该问题。换句话说,我们会跟踪用户在数据库中正确回答的问题。 现在我的问题是(除了在RoR和一般的前端是一个完整的新手),我不知道如何在我的视图中插入复选框(表单)以及问题。 我使用的是rails 4。 谢谢!
答案 0 :(得分:0)
我会开始为所有答案添加布尔值。
$ rails g migration AddCorrectToAnswers
现在迁移应该看起来像
class AddCorrectToAnswers < ActiveRecord::Migration[5.0]
def change
add_column :answers, :correct, :boolean, default: false
end
end
现在我们可以创建一个标记答案正确的新路线
# config/routes.rb
Rails.application.routes.draw do
...
resources :questions do
resources :answers do
match "/correct" => "answers#correct", :as => :correct, via: :all
end
end
...
end
现在你应该有一条新路线
question_answer_correct /questions/:question_id/answers/:answer_id/correct(.:format) answers#correct
我假设答案在问题显示页面
现在在您的展示页面中,您可以执行类似的操作
# app/views/questions/show.html.erb
<% @question.answers.each do |answer| %>
<%= answer.answer %>
<%= form_for @user, :url => url_for(:controller => 'answers', :action => 'correct') %>
<%= f.label "Correct Answer" %> <br />
<%= f.check_box :correct %> <br />
....
<%end %>
<% end %>
现在你要做的最后一件事就是在答案控制器中创建一个名为correct的方法,将答案标记为正确
# app/controllers/answers_controller.rb
class AnswersControlle < ApplicationController
...
def correct
@answer = Answer.find(params[:answer_id])
@answer.correct = true
@answer.save
redirect_to :back
end
end
我希望这有助于
快乐编码
答案 1 :(得分:0)
假设您已经有表单设置,
您可以添加一个说明提交的按钮或任何您想要显示的按钮
<button class="check">Click me</button>
现在你可以为这个按钮编写一个事件监听器,它可以显示答案,如果它与用户给出的答案匹配,那么fire和Ajax会调用你的后端并保存你想要的任何内容。
示例代码:
$('.check').on('click', function(){
var real = $('.reveal-answer').val();
$('.reveal-answer').show(); // you need to protect this part from being abused
var answer = $('.user-input-answer').val(); //Assuming its a input field
var questionId = $('.question').data('question-id');
if(answer === real){
url = '/submit_answer';
data = { question_id: questionId, answer: answer };
$.post( url, data , function() {
}, 'json');
}
});
大致它应该像这样工作但是从安全角度来看还有很多工作要做。例如:你不能在视图方面得到所有答案,你应该在提交答案后进行后端验证(检查它是否真的正确或有人试图破解它。)