2016-09-02 7 views
0

이것은 모델을 시도하고 업데이트 할 때 특히 자주 발생합니다.내 모델 속성이 왜 순서가 저장되지 않습니까?

나는 퀴즈 응용 프로그램을 가지고 있고, 나는이 양식을 사용하여 퀴즈 추가

<%= form_for(@quiz) do |f| %> 
    <% if @quiz.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@quiz.errors.count, "error") %> prohibited this quiz from being saved:</h2> 

     <ul> 
     <% @quiz.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 


    </div> 
<div class = 'field'> 
    <%= f.label :difficulty, "Difficulty of Quiz, 1 to 3 with 3 being most difficult" %> 
    <%= f.text_field :difficulty %> 

</div> 
    <div class="field"> 
    <%= f.label :for_unsubscribed, "Check to have this quiz be visible to logged in but unsubscribed users" %> 
    <%= f.check_box :for_unsubscribed %> 


    </div> 
    <%= f.fields_for :questions do |question_attribute| %> 
    <div class = 'inner-c'> 
    <p> 
    <%= question_attribute.label :content, "Question" %> <span><b><%= question_attribute.index + 1 %></b></span> <br/> 
    <%= question_attribute.text_area :content, :cols => 100, :rows => 4 %> 
    </p> 
    <p> 
    <%= question_attribute.label :explanation, "Answer Explanation" %> <br/> 
    <%= question_attribute.text_area :explanation, :cols => 100, :rows => 6 %> 

</p> 
    <%= question_attribute.label :_destroy, "Remove Question"%> 
    <%= question_attribute.check_box :_destroy %><br/> 

    <%= question_attribute.label :passage, "Reference Passage" %> <br/> 
    <%= question_attribute.text_area :passage, :rows => 3, :class => 'passage-input' %> 


    <%#= question_attribute.label :question_explanation, "Question Explanation" %> 
    <%#= question_attribute.text_area :question_explanation, :rows => 10 %> 


    </p> 

    <%= question_attribute.fields_for :answers do |answer_attribute| %> 
    <p> 
     <%= answer_attribute.label :content, "Answer" %> 
     <%= answer_attribute.text_field :content %> 
     <%= answer_attribute.label :correct_answer, "Check to indicate correct answer", :class => 'inline' %> 
     <%= answer_attribute.check_box :correct_answer, :class => 'inline'%> 

    </p> 
    <% end %> 

    </div> <!-- inner-c --> 
<% end %> 


    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

새로운 양식과 같이 컨트롤러에 의해 생성된다 :

def new 
    @quiz = Quiz.new 
    50.times do 
    question = @quiz.questions.build 
    5.times { question.answers.build } 
    end 
    end 

중첩 사용의 활용을 모델, 퀴즈 has_many 질문이 has_many 답.

문제는 - 내가 퀴즈를 만들 때 (50 개의 질문이있는 경우), 나중에 퀴즈를 수정하고 예를 들어 실수를 수정하려고합니다. 질문이 순서가 잘못되었습니다. 질문 43과 질문 1이 장소를 전환 할 수 있습니다. 나는 그들을 업데이트 한 후에 같은 순서로 머물러야하는 질문이 절대적으로 필요하지만 어떻게해야 하는지를 알 수는 없다. 어떤 아이디어?

답변

0

일반적으로 RDBMS에서는 사용자가 명시 적으로 상태를 지정하지 않는 한 순서는 기본적으로 지정되지 않습니다. 따라서 주문을 지정하지 않으면 원하는 순서대로 결과를 얻을 수 있습니다.

그러나 설명 질문 43에 따라 업데이트 후 질문 1이 바뀌어 updated_at 타임 스탬프로 주문했다고 생각할 수 있습니다. id - id에 의해 명시 적으로 주문 질문을 주문하려고하면 [일반적으로] PrimaryKey이며 결코 변경되지 않으므로 질문은 순서대로 유지됩니다.

+0

나는 더 나아가서 ID가 레코드 생성의 오름차순으로 생성된다고 가정하지 않습니다. 앱에 주문 된 질문에 대한 명시적인 요구 사항이있는 경우 명시 적으로 모델링해야합니다 (예 : 질문에 '서수'속성 포함). –

+0

몇 가지를 설명해 주셔서 감사합니다. 그러나'updated_at' 타임 스탬프를 사용하여 주문하는지 어떻게 알 수 있습니까? 질문을 표시 할 때 나는 단순히'questions.each do | question |'와 같은 일을하고 있습니다. 그리고 그것을 명시 적으로 모델링 할 수 있습니까? 나는 아직도 레일에 아주 새롭다! – nachime

관련 문제