2012-11-09 51 views
0

我已經在問題和答案模型之間構建了嵌套資源。這是形式我用來創建問題,我只是包裝相關的信息:爲什麼rails通過方法保存對象時嵌套字段的順序顛倒保存

<fieldset> 
    <legend>Question</legend> 
    <%= render 'new_question_fields', question_form: question_form %> 

    <legend>Answer</legend> 
    <%= question_form.simple_fields_for :answers do |answer_form| %> 
     <%= render 'answer', f: answer_form %> 
    <% end %> 
</fieldset> 

這是我answer部分:

<div class="answer_fields well fields"> 
    <%= f.input :correct, label: 'This answer is correct.' %> 
    <%= f.input :content, input_html: { rows: 3, class: 'span6' } %> 
</div> 

這是我的索引頁,顯示問題:

<ul class="questions"> 
    <% @questions.each do |question| %> 
    <li><%= question.content %></li> 
    <ol class="answers"> 
     <% question.answers.each do |answer| %> 
     <li><%= answer.content %></li> 
    <% end %> 
    </ol> 
    <% end %> 
</ul> 

在創建新問題的頁面上,我爲4個問題的答案構建了4個字段。這是HTML代碼4的textarea的時候都在渲染HTML:

<textarea cols="40" id="question_answers_attributes_0_content" name="question[answers_attributes][0][content]" rows="3"></textarea> 
<textarea cols="40" id="question_answers_attributes_1_content" name="question[answers_attributes][1][content]" rows="3"></textarea> 
<textarea cols="40" id="question_answers_attributes_2_content" name="question[answers_attributes][2][content]" rows="3"></textarea> 
<textarea cols="40" id="question_answers_attributes_3_content" name="question[answers_attributes][3][content]" rows="3"></textarea> 

說,我場的順序是0,1,2,3,但是當我保存的問題,答案的順序是相反的,例如:

如果i型4答案A,B,C,D對應於形式textarea的順序是0,1,2,3,當問題被保存時,它顯示此:D,C,B,A,這意味着它保存的文本區域question[answers_attributes][3][content]第一,然後question[answers_attributes][2][content] ...

更新:這是我的索引和創建問題的控制器操作:

def index 
    @questions = Question.where("user_id = ?", current_user.id).paginate(page: params[:page], per_page: 10) 
end 

def create 
    @question = Question.new(params[:question]) 
    @question.question_type_id = params[:question_type_id] 
    @question.user_id = current_user.id 

    if @question.save 
    flash[:success] = "Successfully created question." 
    redirect_to questions_url 
    else 
    render 'new' 
    end 
end 

answer型號:

class Answer < ActiveRecord::Base 
    attr_accessible :content, :question_id, :correct 
    belongs_to :question 
end 

是什麼時候的問題是保存發生的呢?這是因爲方法save的軌道或我的顯示形式?

+0

如何創建@questions變量?在控制器中有沒有'.order()'代碼或模型中有默認的排序集? –

+0

我剛剛使用'@question = Question.new(params [:question])'和'@ question.save'來創建問題對象。 – Thanh

+0

澄清:如何在索引視圖中創建@questions變量**?只顯示控制器和_Question_模型中的_index_動作。 –

回答

0
  • question.answers.order("created_at ASC")...或;
  • question.answers.order("created_at DESC")...

之一應該顛倒順序。

-

但更多有關該主題的 - 我想這是關於如何堆棧那裏處理。您在創建每個答案時都會將其作爲問題的屬性傳遞給它,這可能是混合的地方。來自Rails &數據庫的日誌數據庫w/log_level :debug應該有助於瞭解它是如何進入數據庫的。

而且id ASC可能適合你,因爲你的IDS隨時間遞增反正那麼它只是爲created_at ASC相同 - 但依靠IDS可能並不總是一個好辦法,因爲有時候ID可能是隨機的。

+0

好吧,我想這是因爲'each'循環,當我嘗試在控制檯中運行'@ question.answers.each'時,它也會先返回最後一個答案,並且第一個答案是最後一個答案。我不知道爲什麼每個人都這樣做。 – Thanh

+0

該id只是一個序列整數,它不是隨機的。 – Thanh