2010-01-08 3 views
2

레일즈의 플래시 해쉬는 새로운 것이 아니라는 것을 알고 있습니다.하지만 계속해서 같은 문제가 발생합니다.레일은 MVC의 플래시 해시 위반을?

컨트롤러는 사용자에게 표시 할 문자열을 포맷하는 것이 아니라 비즈니스 로직 및 db 쿼리 용이어야합니다. 그러나 플래시 해시는 항상 컨트롤러에 설정됩니다. 즉, Flash 해시 문자열을 서식 지정하기 위해 만든 Helpers를 사용하기 위해 Rails를 해킹하고 작업해야합니다.

MVC에 대한 실용적인 타협입니까? 아니면 여기에 누락 된 것이 있습니까?

이 문제는 어떻게 처리합니까? 아니면 그것을 하나라고 보지 않습니까?

답변

2

컨트롤러에서 헬퍼에 "강제로"액세스하는 것이 가능해 보입니다. 여기에이 논의를 참조하십시오

http://lojic.com/blog/2007/07/27/using-helpers-inside-controllers-in-ruby-on-rails/

또한 인스턴스 변수에 대한 부분 "렌더링"수 있습니다. 이 페이지를 참조하십시오 : 당신이 컨트롤러 내에서 "render_partial"호출하는 경우,

http://snippets.dzone.com/posts/show/396

보통을, 부분하지만 아무것도 렌더링되지 않습니다.

때때로 인스턴스 변수를 문자열로 렌더링하여 뷰가 여전히 으로 렌더링 될 수 있고 문자열을 뷰에 전달할 수있는 경우 유용합니다.

add_variables_to_assigns

@content_for_navbar = @ template.render_partial '레이아웃/public_navbar'`

2

레일은 반드시 엄격하게 MVC 없습니다. Rails 세계에서 컨트롤러는 MVC 패턴에서 View-Controllers라고 불리는 것과 유사합니다.

또한 '순수한'MVC에서는 제어기가 이 아니고은 모델 계층에 캡슐화되어야하는 DB 쿼리와 비즈니스 로직을 수행해야한다고 주장합니다. 컨트롤러는 뷰와 모델간에 데이터를 이동시키는 것에 관한 것입니다.

플래시 해시에 고정 된 형식의보기에 대한 도우미 메서드를 만드는 방법은 무엇입니까? 플래시에는 문자열 값만 있으면 안됩니다. 임의의 객체를 포함 할 수 있습니다. 종종 모델 유효성 검사 오류 배열을 flash[:error]에 넣고 도우미 메서드를 작성하여 해당 메시지의 형식을 <ul>으로 지정합니다.

0

정말로 원한다면 플래시 변수에 키를 저장 한 다음보기에서 해당 키를 실제 메시지로 변환 할 수 있습니다. 플래시 디스플레이가 어떤 식 으로든 내장되어 있지 않습니다. 그것은 모두 순수한 MVC를 얻기 위해 당신이 얼마나 많은 작업을하고자하는지에 달려 있습니다.

0

shedd에서 설명한 방법은 저에게 적합하지 않았습니다. http://snippets.dzone.com/posts/show/396에 설명 된 두 번째 방법이 작동했습니다.

@content_for_navbar = render_to_string :partial => "layouts/public_navbar"