2012-09-12 4 views
0

나는 attibutes 이름, 제목, 설명 요법이있는 모델이 있습니다. 이름이 예를 들어 weather-forcast 인 경우 추가 html 요소를 표시하고 싶습니다. 멋진 템플릿을 생성하는 show 템플릿에최상의 접근 -보기의 조건

= high_chart("my_id", @chart) 

을 입력하고 싶습니다. 페이지가 weather-foracast가 아닌 경우 차트를 표시하고 싶지 않습니다.

최상의 접근 방법은 무엇입니까? 보기의 조건? 당신이 HAML있어 것 같습니다 때문에

+0

하면 레이아웃, 파셜, 헬퍼 읽어나요? –

답변

1

문제는 실제로 Object on Rails에 표시된 전시 패턴과 비슷합니다.

간단히 설명하자면, 제안 된 솔루션은 모델 상태 (레코드 이름)를 사용하여 선택한 데코레이터 (또는 여러 개의 데코레이터)에 모델을 래핑하는 것입니다.

나뿐만 아니라 그것이 book에 설명으로 설명 할 수

하지만 패턴 Avdi 그림 형제는 그것의 보석을 만들어 너무 유용 https://github.com/objects-on-rails/display-case

+0

이것은 그 것이다! 나는 그것을 읽을 것이다. .. 고마워! – Remco

1

, 당신은 너무 같은 if 수정을 사용할 수 있습니다 [model.name]가 적절한 코드로 대체

= high_chart("my_id", @chart) if [model.name] == "weather-forecast" 

.

+0

@Remco, 언젠가 당신의 견해에 너무 많은'if's를 얻지 않기를 바랍니다. –

+0

만약'if's를 잘못한다면 리팩토링을 고려해야합니다. 즉, 정보의 표시 방법을 결정하기 위해 조건부가 사용되는 한보기의 간혹 'if'문은 완벽하게 훌륭합니다. Rails 가이드에 제공된 예제조차도 조건문을 포함합니다. –

1

나는이 답변이 전적으로 위에 있다는 것을 알고 있지만, 고려해야 할 것은 무언가를 조건부 논리로 옮기는 것입니다.
아마보기 발표자 패턴으로 가고,이 참조 : About presenter pattern in rails. is a better way to do it?

발표자는 루비 객체 정말 쉽게 테스트 할 수 있습니다.
뷰 내부에 수많은 논리가 있으면 실제로 테스트하기가 어렵습니다.
또한,보기 페이지 내의 model.name을 확인하는 것이 MVC의 최선의 방법이 아닌 논리 분리를 원합니다.

관련 문제