2013-11-27 2 views
1

나는 Risk 모델을 가지고 있습니다. 각 User에 대해 미리 정의 된 risk을 저장하고 싶습니다.다른 답변을 처리하는 방법

  1. 흡연자입니까? 예 | 아니요 (부울 값)
  2. 몇 개의 궐련? (정수)
  3. 당뇨병 환자입니까? (문자열) [이후]

    ...

어떻게 구현해야 Risk 대답의 다른 유형 (정수, 부울, 문자열)의 그것을 할 수 만드는가? 양식은 어떻게 보이나요? 지금, 나는 약 Risk 다음과 같이 생각하고있다 : 나는 미래에 동적으로 더 많은 질문을 추가 할 수 있도록

Risk 
    question(string) 
    answer_type(integer) 
    answer 

.

+0

스토어에게 용기의 어떤 MessagePack처럼 DB에, 프로토콜 버퍼, JSON 등? 그러나 당신이 들판에 indicies를 원한다면 몇 가지 어려움이있을 것입니다. – fl00r

답변

1

내 생각은 :

Risk 
    user_id (integer) 
    question_id (integer) 
    question(string) 
    answer_type(integer) 
    answer (string) 

당신은 몇 가지 통계를 만들 싶은 경우에, 당신은 구문 분석해야합니다 답변 answer_type의 따라 달라집니다. 예를 들어

answer_type -> 1 for text answer 
answer_type -> 2 for integer answer 
... 

는 정수 응답 평균을 계산하려면 :

risks = Risks.where(question_id: 1) 
    if risk.answer_type == 2 
     total += answer.to_i 
    end 
    average = total/User.all.count 
-1

이상적으로, 위험 모델에서

question(string) 
answer (text) 

, 올바른 형식으로 답을 반환하는 메서드를 추가 질문에 (기준).

require 'string_extensions' 
Class Risk 
... 

    def correct_answer 
    if self.question == 'Are you smoker?' 
     self.answer.to_bool # Add the Gist-code in your libs and include this 
    elsif self.question == 'How many cigarettes?' 
     self.answer.to_i 
    else 
     self.answer 
    end 
    end 

+0

미안하지만 나는 언급하지 않았다. 앞으로 더 많은 질문을 추가 할 수 있기를 원합니다. – tomekfranek

+0

질문을 더 추가하려는 경우에도 IF 조건 만 변경하면됩니다. 더 이상 새로운 열은 필요하지 않습니다. –

+0

downvoted 사람이 다른 솔루션을 권장 할 수 있습니다. 나도 배울 수있는 기회. –

관련 문제