Ruby on Rails 4,在视图中形成

时间:2017-01-04 02:38:36

标签: ruby-on-rails forms ruby-on-rails-4 view

我目前正在尝试构建一个向用户显示问题的视图,如果他们回答正确的问题,则允许用户选中一个复选框,该复选框发送请求以在数据库中保留该问题。换句话说,我们会跟踪用户在数据库中正确回答的问题。 现在我的问题是(除了在RoR和一般的前端是一个完整的新手),我不知道如何在我的视图中插入复选框(表单)以及问题。 我使用的是rails 4。 谢谢!

2 个答案:

答案 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');
 }
});

大致它应该像这样工作但是从安全角度来看还有很多工作要做。例如:你不能在视图方面得到所有答案,你应该在提交答案后进行后端验证(检查它是否真的正确或有人试图破解它。)