Closed yhoonkim closed 9 years ago
원래 객체는 object 함수를 이용하여 참조할 수 있는 것 같습니다. 아래와 같이 하면 의도한 방향대로 작성할 수 있을듯!
class MessageDecorator < Draper::Decorator
delegate_all
def created_at
object.created_at.localtime.strftime("%Y-%m-%d %T")
end
end
마지막에 궁금해 했던 내용은 Todonut 할 때 멘토님이 말씀해 부분 참고 하면 좋을듯! https://github.com/DonutWorks/ToDo.nut/pull/68
아 커밋 메시지에 "one more thing..."은 뭐여 ㅋㅋㅋㅋ 궁금하셨던 부분은 @FeGs 와 @MujinChae 이 설명한 그대로입니다. 수정해서 반영해주시면 될 것 같네요~
pretty_
는 빼지 않았습니다. 그 이유는 model의 어떤 속성(due_date
...)을 뷰에서 꼭 decorate용이 아닌 logic 계산용으로 사용하고 있어서입니다. 제 생각에도 overriding같은 걸 안해주는게 덜 헷갈릴 것 같고 다들 pretty_에 익숙한 것 같으니 흐흐...user.decorate
을 하게 되었습니다. 간단하게 안빠질 것 같아서 리팩토링 이슈로 추가하고자 합니다.모든 Gem들에는 그 나름대로의 사용법이 있습니다. 이를 응용하는 연습을 하는 것도 좋지만, 처음에는 메뉴얼을 그대로 따라가는 게 가장 쉽게 배우는 방법이라고 생각합니다. ㅎㅎ
그런 의미에서, Draper에서는 보통 pretty_
와 같은 접두어를 붙여서 사용하지 않습니다.
overriding이 헷갈릴 수도 있다는 건 사실입니다만, 그렇다면 Draper를 사용 안 하는게 맞겠죠.
처음에는 Draper에서 권장하는 방식으로 구현하면 좋을 것 같습니다. ㅎㅎ
모델에 있는 내용을 그대로 사용하는 경우는 decorator.object.model_method
와 같이 호출합니다. @user.generation_id
의 경우는 데코레이터로 감싸주면 @user_decorator.object.generation_id
로 호출할 수 있겠죠.
위의 방식을 쓰는게 지저분하다고 생각될 경우에만 데코레이터에서 별도의 메소드를 만들어 줍니다. 다만 그런 예외적인 케이스를 제외한 나머지 부분은 모두 overriding이 디폴트입니다. ㅎㅎ
@shaynekang 넵! 알겠습니다. 그럼 prefix를 제외하고 다시 커밋하도록 하겠습니다~
@yhoonkim -_-)b
Draper를 이용하여 decorator를 적용 하였습니다.
delegate_all 을 하여서 그런지 decorator에서 기존의 있는 이름으로 또 반환할 수가 없더라고요. 예를들면
으로 구현하면 stack is too deep 하다면서 에러가 납니다. decorate된 것과 안된것에 차이를 둬야 할 것 같아서 pretty_ 라는 prefix를 두었습니다.ㅠㅠ
+
.decorate
을 부르는 것은 controller에서 하는게 좋을까요? view에서 하는게 좋을까요?