2013-10-28 8 views
0

티켓을 보류 중이거나 읽지 않은 상태로 회신 할 수있는 티켓 시스템이 있습니다. 이들은 '상태'라고하는 다른 모델에 저장되며, 각 상태는 직접 데이터베이스를 시드하여 수동으로 만들어야합니다.상태를 추적하는 "올바른"방법은 무엇입니까?

sudocode :

//database is seeded and creates various statuses 

ticket.new(params here) 
ticket.save! 
//ticket status automatically set in before_create 
//status = Status.find(1); 
ticket.status.description //'unread' to start 

I post on it, ticket updates to replied 
//ticket status automatically set in before_update 
//status = Status.find(3); 
ticket.status.description //'replied' 

하지만 티켓이 자동으로 업데이트 할 때 오류 무리가 와서이 상태의 데이터베이스 (예 : 공장 시험에서와 같이) 시드되지 않았기 때문에이 나쁘다. "옳은"방법으로 이것을 설정하는 것이 무엇입니까? ... 정확히 ...

+0

왜'status'는'ticket' 테이블의 컬럼이 아닌 별도의 테이블에 있습니까? –

+0

내 코드가 아님 - 우리가 학생들에게 위임 한 대학 학기 프로젝트로 시작됨 ... 나는 주정부가 미리 정해져 있기 때문에 그들이 생각한 것으로 추정한다. – MidnightDemon

답변

2
당신이있는 경우에 당신은 state_machine 보석을 확인해야

가 already.It 당신이 무엇을 찾고 할 수없는 문자열 리터럴에 물건을 저장

는 나쁜하지만 난 모르겠어 를 위해 : https://github.com/pluginaweek/state_machine

당신은 당신이 상태를 사용하려면 다음 모델에서 원하는 상태를 설정 테이블의 상태 열을 생성하여 사용합니다.

당신은 쉽게 당신이 스크린 캐스트 체크 아웃 할 수있는 추가 정보 또는 다른 보석을 필요로이 gem.If를 사용하여 상태를 관리 할 수 ​​있습니다 말 http://railscasts.com/episodes/392-a-tour-of-state-machines

을 그는 또한 처음의 경우에서 유한 상태 기계를 만드는 방법을 보여줍니다 당신은 웬일인지 보석을 사용하고 싶지 않습니다.

관련 문제