문제

Routes.rb에 지정된대로 지정된 레이아웃 템플릿을 특정 컨트롤러와 그 안에 중첩 된 모든 리소스에 자동으로 할당 할 수 있습니까? 이 레이아웃은 지정된 컨트롤러 뷰와 그 안에 중첩 된 컨트롤러 뷰 만 적용해야합니다. Application.html.erb는 응용 프로그램 내의 모든보기에 적용 할 필요는 없습니다 (실제로 중첩 레이아웃의 응용 프로그램 레이아웃과 함께 특수 레이아웃을 사용하고 있습니다).

예를 들어, 내가 가지고 있다면

map.resources :news, :shallow => true do |n|
  n.resources :articles do |a|
    a.resources :comments
  end
end

내가 URL처럼 방문 할 때 localhost/news/1/articles/new 나는 내 봐야한다 news.html.erb 실제 레이아웃. 지금 당장은 그렇지 않습니다.

부모 내에 중첩 된 각 컨트롤러에 대해 동일한 레이아웃 파일을 재현하고 싶지 않습니다 (고기를 꺼내어 레이아웃을 꺼내어 공유 부분에 넣더라도). 나는 특정 컨트롤러 자체에 레이아웃 템플릿을 지정하는 것에 대해 덜 흥분합니다 (이 특정 예는 임시적인 것이지만,이를 위해 '실제'사용 사례를 조금 더 아래로 내려 놓을 것입니다).

감사!

도움이 되었습니까?

해결책

명확성을 위해 원래의 질문을 편집하는 것 (답은 중심 문제에 대답하지 않았습니다). 내가해야 할 일은 중첩 컨트롤러 클래스가 최상위 부모로부터 상속된다는 것을 깨달았습니다. 이것은 중심 문제를 더 쉽게 해결할 수있을뿐만 아니라 저를 잔소리하고있는 몇 가지 다른 것들을 수정합니다.

(나는 "A'doy"라고 말하지만이 앱에서 작업하는 다른 사람들이 있습니다.이 앱은 일반적으로 조금 더 분명한 것을 모호하게했습니다.)

다른 팁

당신의 뉴스를 위해 .html.erb 문제, 그 타 오타입니까? News.html.erb 파일이 아닌 Views/Articles 폴더 (기본 레이아웃을 가정)에있는 new.html.erb 파일이 표시됩니다. @news 인스턴스 변수가 설정되어 있는지 확인하고 Form_for는 @article 대신 [@news, @article]에 대한 것입니다.

또한 각 컨트롤러에 대한 레이아웃을 만들 필요가 없으며 레이아웃 폴더에서 하나의 application.html.erb를 만들 수 있으며 레이아웃 폴더에 레이아웃이없는 모든 컨트롤러는 application.html.erb 및 컨트롤러에 지정할 필요가 없으며 컨트롤러와 동일한 이름으로 레이아웃을 제거하십시오.

"컨트롤러 자체에 레이아웃 템플릿을 지정하는 것에 대해 기뻐합니다."

이것에 대해 걱정할 이유가 없습니다. 이것은 단순히 당신이하는 일입니다. 이 목적을 위해 특별히 생성 된 DSL 코드의 한 줄입니다. 어리석지 않습니다.

class ArticlesController < ActionController::Base
  layout :news
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top