2010-10-05 62 views
0

我有一個嵌套的窗體,結構化:Question has_many Answers。所以,這些問題是多種選擇。嵌套形式has_many模型。如何從嵌套項目獲取ID?

當前表單視圖:

- semantic_form_for @question do |f| 
    = f.error_messages 
    - f.inputs do 
    = f.input :question 
    = f.semantic_fields_for :answers do |builder| 
     = builder.input :content, :label => "Answer", :input_html => { :class => {'required', ' ckeditor'}} 
    = f.buttons 

我的問題控制器看起來像:

def new 
    @question = Question.new 
    4.times { @question.answers.build } 
    end 

    def create 
    @question = Question.new(params[:question]) 
    @question.user_id = current_user.id 
    if @question.save 
     flash[:notice] = "Question added." 
     redirect_to questions_url 
    else 
     render :action => 'new' 
    end 
    end 

所有非常簡單。但是,現在我想「選擇」正確的答案,最好在同一頁上添加。我想我會爲包含某種「CorrectAnswerId」的問題添加一個新列。但是,我怎樣才能在視圖&控制器中添加它?

回答

1

我假設你會使用某種複選框方法來表示「這是正確的答案」。

在這種情況下,您可以簡單地使複選框包含答案的ID,然後在create上,您可以將correct_answer_id列設置爲該複選框的ID值。

但是,因爲您的答案在此時尚未保存(構建僅在內存中創建對象),所以直到答案已保存爲止,您纔會擁有該ID。最簡單的解決方案只是在答案表中將答案標記爲正確,而不是在問題表中。然後,你可能會在Question創建模型的方法,如:

def correct_answer 
    @correct ||= answers.where(:is_correct => true) 
end 

這也將給你以允許多個正確答案,如果你需要它的能力。 如果這不是真的有必要,您可以隨時將.first添加到查詢字符串的末尾,以便返回一個答案而不是正確答案的數組。

+0

thx lukas!完美無缺地工作。我做了一個簡單的jquery檢查,以確保一次只檢查一個複選框,也可以工作! :) – 2010-10-08 16:40:57