2013-10-18 2 views
1

레일 응용 프로그램에서 'work book'루비를 만들고 있습니다. 기본적으로 사용자는 한두 문단을 읽은 다음 읽은 내용을 토대로 몇 가지 질문에 답변합니다.웹 양식에서 상태 저장 및 검색

어떻게 모델을 만드는지 잘 모르겠습니다. 종이 워크 북에는 많은 페이지가 있으며 각 페이지에는 많은 단락이 있습니다. 물리적 형태 그대로 정확하게 모델링해야합니까? 아니면 모델을 단순화해야합니까?

가장 큰 질문은 상태를 저장하여 사용자가 자신의 과제를 제출 한 후 통합 문서를 업데이트하고 수정하도록하는 것입니다.

나는 이런 식으로 뭔가 가고 싶어

답변

2

나는이 관계가 당신을 위해 일할 수있는 생각 :

class WorkBook 
    has_many :pages 

class Page 
    belongs_to :work_book 
    has_many :paragraphs 

class Paragraph 
    belongs_to :page 
    has_many :questions 

class Question 
    belongs_to :paragraph 
    has_many :answers 

class Answer 
    belongs_to :question 
    belongs_to :user 

class User 
    has_many :answers 
    has_many :answered_questions, class_name: 'Question', through: :answers 

답변 (value_string, value_float, value_boolean 등)에 대한 더 나은 제어를 원한다면 추가 모델 "AnswerValue"를 추가하십시오.

이 경우 너무 많은 모델이있는 것처럼 느껴지 겠지만 나를 신뢰하면 앱이 유연 해지고 각 모델/관계에 '세부적인'기능을 추가 할 수 있습니다.

이러한 관계를 가진 확장 : Answer "처럼 작동하는"AnswerCorrection "모델을 추가 할 수 있지만 사용자가 통합 문서를 업데이트 한 후에 다른 값을 저장하는 방법이 될 수 있습니다.

희망이 도움이됩니다.

+1

나를 게시 버튼으로 때려 눕히기 - 이것이 내 답변과 거의 똑같은 것이 좋습니다. – Momer

0

:

class PaperWork < ActiveRecord::Base 
    has_many :pages 
    has_many :paragraphs, through: :pages 
end 

class Page < ActiveRecord::Base 
    belongs_to :paper_work 
    has_many :paragraphs 
end 

class Paragraph 
    belongs_to :page 
    belongs_to :paper_work, through: :page 
end 

그런 다음 당신은 약간이 아이디어를 중심으로 과제를 모델링 할 수 있습니다 :

class Asignment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :paragraph 
    # attributes: description, status(pending, completed, etc.) 
end