2011-04-19 11 views
0

사용자의 미리 알림을 예약 할 수 있어야합니다. 그래서 기본 모델 Reminder을 만들고 STI를 사용하여 알림이 실행될 때 호출되는 fire() 함수를 재정의하는 자손 클래스를 만들 수 있다고 생각했습니다. 그러나 서로 다른 사용자 역할에는 유사한 유형의 미리 알림이 있습니다. 그래서 그들은 네임 스페이스가 필요합니다. Adult::BrushTeethReminder은 kid 님의 FB 벽에 Kid::BrushTeethReminder 게시물을 이메일로 발송합니다.STI + 네임 스페이스

STI를 사용하여 가능합니까? 그렇다면 어떻게됩니까? 내가 보는 다른 방법은 KidBrushTeethReminder 같은 모델 이름 앞에 붙이는 것입니다. 또는 더 깊게갑니다 - 유형에 따라 객체를 만드는 팩토리 메소드를 작성하십시오. 아니면 더 깨끗한 방법이 있습니까?

답변

1

다른 네임 스페이스의 모델에 STI를 사용할 수 있다는 것을 알게되었습니다. 적절한 하위 폴더에 배치하면됩니다. 예를 들어, Kid::BrushTeethReminderbrush_teeth_reminder.rb

1

두 가지 유형의 알림을 볼 수 있습니다. 하나는 성인용이고 다른 하나는 어린이 용입니다. 개인적으로 Reminder라는 STI를 사용하고 BrushTeeth라는 한 모델을 Reminder에서 상속받습니다. BrushTeeth 모델에서는 for_adult 및 for_kid라는 두 개의 부울 열을 사용합니다.

성인용 네임 스페이스에서 for_adult 열이 TRUE로 설정되어 있는지 여부를 쿼리하고 해당 로직/구현을 기반으로 BrushTeeth를 확인할 수 있습니다. 키즈 네임 스페이스의 경우 for_kid 열을 확인합니다.

알림을 기본으로 설정하면 다른 미리 알림 (샤워, 목욕, 손톱 등)을 쉽게 할 수 있습니다. Reminder 모델은 STI 모델이므로 Type 열도 제공됩니다.

희망이 있습니다.

+0

의 파일에 아래에 넣어야합니다. 실제로는 기본 클래스로 '미리 ​​알림'을 사용하려고합니다. 그러나 키즈와 어른은 단순한 예일뿐입니다. 실제로 많은 역할과 미리 알림이 있으므로'for_kid','for_adult' 열을 추가하는 것이 좋은 방법은 아닙니다. – RocketR