액션 당 레일 레이아웃?
일부 작업 (대부분의 컨트롤러에서 새 작업)에 대해 다른 레이아웃을 사용합니다.
레이아웃을 지정하는 가장 좋은 방법이 무엇인지 궁금합니다. (동일한 컨트롤러에서 3 개 이상의 다른 레이아웃을 사용하고 있습니다)
나는 사용하는 것을 좋아하지 않는다
render : layout => '이름'
나는 일을 좋아
레이아웃 'name', : only => [: new]
그러나 2 개 이상의 다른 레이아웃을 지정하는 데 사용할 수 없습니다.
예를 들면 다음과 같습니다.
레이아웃 이름이 다르고 옵션 만 다른 동일한 컨트롤러에서 레이아웃을 두 번 호출하면 첫 번째 컨트롤이 무시됩니다. 지정된 액션에는 해당 동작이 표시되지 않습니다.
참고 : Rails 2를 사용하고 있습니다.
방법을 사용하여 레이아웃을 설정할 수 있습니다.
class MyController < ApplicationController
layout :resolve_layout
# ...
private
def resolve_layout
case action_name
when "new", "create"
"some_layout"
when "index"
"other_layout"
else
"application"
end
end
end
두 레이아웃 중 하나만 선택하는 경우 다음을 사용할 수 있습니다 :only
.
class ProductsController < ApplicationController
layout "admin", only: [:new, :edit]
end
또는
class ProductsController < ApplicationController
layout "application", only: [:index]
end
respond_to를 사용하여 개별 액션의 레이아웃을 지정할 수 있습니다 .
def foo
@model = Bar.first
respond_to do |format|
format.html {render :layout => 'application'}
end
end
render를 사용하여 액션의 레이아웃을 지정할 수도 있습니다.
def foo
render layout: "application"
end
그것에 대한 보석 (layout_by_action)이 있습니다 :)
layout_by_action [:new, :create] => "some_layout", :index => "other_layout"
https://github.com/barelyknown/layout_by_action
컨트롤러에서 레이아웃을 지정하는 다양한 방법 :
다음 코드에서는 application_1 레이아웃이 인덱스에서 호출되고 사용자 컨트롤러의 조치 표시 및 다른 조치에 대해 애플리케이션 레이아웃 (기본 레이아웃)이 호출됩니다.
class UsersController < ApplicationController layout "application_1", only: [:index, :show] end
다음 코드에서는 application_1 레이아웃이 Users 컨트롤러의 모든 작업에 대해 호출됩니다.
class UsersController < ApplicationController layout "application_1" end
다음 코드에서는 application_1 레이아웃이 Users 컨트롤러의 테스트 작업에 대해서만 호출되고 다른 모든 작업에 대해서는 application 레이아웃 (기본값)이 호출됩니다.
class UsersController < ApplicationController def test render layout: "application_1" end end
정밀성 :
A not really but working DRY way is what you see above, but with a precision : the layout need to be after your variables for working ("@some"). As :
def your_action
@some = foo
render layout: "your_layout"
end
And not :
def your_action
render layout: "your_layout"
@some = foo
@foo = some
end
If you do a before_action... it's won't work also.
Hope it helps.
참고URL : https://stackoverflow.com/questions/3025784/rails-layouts-per-action
'IT' 카테고리의 다른 글
값으로 배열 항목 제거 (0) | 2020.06.03 |
---|---|
자원의 DisplayName 속성? (0) | 2020.06.03 |
이동 평균 또는 평균 (0) | 2020.06.03 |
div 요소 내부의 텍스트를 바꾸려면 어떻게합니까? (0) | 2020.06.03 |
확인란의 값을 가져 옵니까? (0) | 2020.06.03 |