2017-01-04 66 views
-1

我目前正在試圖構建一個視圖,向用戶顯示一個問題,如果他們回答問題的權利,允許用戶檢查一個複選框,該複選框發送請求以堅持數據庫。換句話說,我們會跟蹤用戶在數據庫中正確回答了哪些問題。 現在我的問題是(除了在RoR和前端的一個完整的新手一般),我不知道如何插入複選框(窗體)在我的觀點與問題一起。 我正在使用導軌4. 謝謝!Ruby on Rails 4,形式內部視圖

+0

你可能不需要複選框,像按鈕這樣的任何元素都可以完成這個工作......換句話說,你不需要包含另一個表單元素或表單。你在談論多項選擇題嗎?用一個小例子回答你的問題。 – Abhinay

+0

請添加更多詳細信息,如代碼段和使用案例..不確定如果我想正確的方式..不想在這裏假設 – Abhinay

+0

@Abhinay你可能是正確的關於按鈕...不,它不是多選題,只是一個文本字段的問題,當用戶想要時,單擊以顯示在另一個文本字段中的答案。如果他們得到了正確的問題,我想要一種方法來記錄它,並將數據庫中的布爾值設置爲true以知道他們回答正確的問題。 – Sam

回答

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 %> 

現在的最後一件事標記爲正確

# 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

上述問題的答案和解決方案,問題和答案都在同一張表中。 'class CreateQuizzes Sam

+0

仍在使用它 – MZaragoza

0

假設你已經有形式設置,

你可以添加一個按鈕,說提交或任何你想diplay

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

大致應該像這樣工作,但也有很多來自安全準做。例如:你不能在視圖方面有所有答案,你應該在提交答案後檢查後端驗證(以檢查它是否確實是正確的或有人試圖破解它)。

+0

在此之後,您可以使用另一個在這裏發佈的答案爲後端的東西。 – Abhinay