2017-01-04 12 views
-1

私は現在、ユーザーに質問を表示するビューを作成しようとしています。質問に正しく答えた場合、ユーザーはチェックボックスをオンにして、データベース。言い換えれば、私たちはどの質問がデータベースでユーザによって正しく答えられたかを把握しています。 私の問題は、RoRとフロントエンドの初心者の方が一般的ですが、チェックボックス(フォーム)を質問の中に挿入する方法がわかりません。 私はレール4を使用しています。 ありがとう!Ruby on Rails 4、ビュー内にフォームを作成

+0

おそらくチェックボックスのように、ボタンのような要素は仕事をします...言い換えれば、別のフォーム要素やフォームを含める必要はありません。あなたは複数の選択肢の質問について話していますか?あなたの質問に小さな例で答えてください。 – Abhinay

+0

コードスニペットやユースケースのような詳細を追加してください。正しい方法で考えているかどうかは分かりません。ここで何かをしたいとは思わないでください。 – Abhinay

+0

@Abhinayあなたはボタンについて正しいかもしれません...いいえ、多肢選択式の質問、質問のためのテキストフィールド、およびユーザーが望むときにクリックすると、別のテキストフィールドに回答が表示されます。質問が正しい場合は、その質問を記録し、データベースの真偽値をtrueに設定して、どの質問が正しく答えられたかを知る方法が必要です。 – Sam

答えて

0

すべての回答にブール値を追加し始めます。

$ rails g migration AddCorrectToAnswers 

今その移行は今、私たちは今、あなたは新しいルート

を持つべきである答えに正しい

# 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 

をマークする新しいルートを作成することができます

class AddCorrectToAnswers < ActiveRecord::Migration[5.0] 
    def change 
    add_column :answers, :correct, :boolean, default: false 
    end 
end 

のようになります。

question_answer_correct  /questions/:question_id/answers/:answer_id/correct(.:format) answers#correct 

私はassuminです答えは質問であるgはあなたのショーのページになりましページ

を表示します

このような
# 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 %> 

何かを行うことができます今、あなたがしなければならない最後の事は正しいと呼ば答えコントローラのメソッドを作成することです私はこれがハッピー

をコーディングすることができますことを願っています

# 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 

として正しい答えをマークします

+0

上記の質問に対する答えとこの解決策、質問と回答はすべて同じ表にあります。 'クラスCreateQuizzes Sam

+0

まだ作業中です – MZaragoza

0

あなたが提出したり、何もあなたが今、あなたは答えを明らかにすることができ、このボタンのイベントリスナーを書くことができます

<button class="check">Click me</button> 

をdiplayしたいと言う一つのボタンを追加することができ、あなたはすでにフォームを設定していると仮定すると、ユーザーが指定した回答と一致する場合は、ファイアと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'); 
} 
}); 

は、おおまかには、このように動作するはずですが、将来の安全保障からやるべきことがたくさんがあります。例:すべての回答を表示することはできません。回答が提出されたら、バックエンド検証を行う必要があります(実際に正しいかどうか、誰かがハックしようとしたかどうかを確認する必要があります)。

+0

この後、バックエンドのものについては別の回答を使用することができます。 – Abhinay

関連する問題