2010-05-03 3 views
1

내 앱을 모델링 한 방식이 약간 비린내 같아요. 나는 이미 다시 지그재그하고 리팩터링했습니다. 그것은 오랜 시간이 걸렸습니다 (저는 초보자입니다). 나는 다시 잘못된 방향으로 나아가려면 다시 주저합니다.Rails - 초보자는 자신의 앱을 어떻게 모델링했는지, 그리고 어떻게 더 잘 할 수 있는지에 대한 피드백을 원합니다.

기본 아이디어, 사용자대답를 제출할 수 있습니다, 다른 사용자 수 마크 그것이 올바른 또는 잘못된. 부정확하다면 정답을 써야합니다. 사용자는 자신의 모든 사람의 정답과 오답을 볼 수 있습니다. 때 대답을 확인하고 사람을 추적하기 위해 응답 객체에 정수 : 날짜 시간 및 checked_by_id : 사용자가 올바른으로 답변을 표시 할 때

그래서 내가 이런 식으로

class Answer 
    has_one: correction 
end 

class Correction 
    belongs_to :answer 
end 

를했다, 나는 checked_at을 설정합니다.

정답이 맞지 않는 정답을 작성하고 다시 checked_by 및 checked_at의 세부 사항을 작성합니다.

두 모델 모두에서 check_by 및 checked_at를 사용했기 때문에이 방법이 좋지 않습니다. 그냥 앉아 있지 않습니다.

가능한 해결책은 다음과 같습니다

가 VerifiedAnswer 등의 세 번째 모델을 생성하고 그 속성에 /를 checked_by 이동합니다. 그것은 답변이 올바른 것으로 표시된 위치를 처리 할 것입니다.

또는이 모든 정보를 저장하는 모든 특성을 가진 하나의 모델 (응답) 만 가질 수있는이 모델은 충분히 얇습니다 (다른 특성은 없습니다)?

+0

맞춤법 검사에 대해 마이클에게 감사드립니다. 제출하기 전에 제목을 확인하는 것을 잊었습니다. – robodisco

답변

1

다른 답으로 답을 수정합니다. 그런 식으로 새 답을 수정할 수 있습니다.

을 지정하여 수행 할 수 있습니다 :이합니다 (correction_id 현재 별도의 테이블을 가리키는 때문에) 수정과 기존의 답변이 데이터를 잘못 설정 한 것을 의미합니다

class Answer 
    belongs_to :correction, :class_name => "Answer" 
end 

하는 것으로. 이 작업을 수행하려면 데이터베이스를 지워야합니다.

+0

나는이 같은 것을 생각하고 있었지만 실제로 대답이 정확한 경우에는 어떨까요? 이 경우 – robodisco

+0

일 경우이 연결은 비어 있으며 answer.correction은 nil이됩니다. belongs_to 관계가 필요하지 않습니다 – Faisal

+0

Faisal -하지만 id는 ok로 체크 한 사람이 누군지 알고 싶습니다. id는 원래 응답 모델에서 checked_by_user_id와 같은 것을 유지해야 함을 의미합니다. 때로는 제로가 아니고 ID에는 수정 오브젝트가 있고 다른 시간에는 수정 오브젝트가 없습니다. 이것이 이것을 구현하는 가장 깨끗한 방법인지는 확실하지 않았습니다. – robodisco

관련 문제