복붙노트

[RUBY-ON-RAILS] 액션 당 레이아웃 레일?

RUBY-ON-RAILS

액션 당 레이아웃 레일?

나는 (주로 컨트롤러의 대부분의 새로운 작업에 대한) 어떤 행동에 대한 다른 레이아웃을 사용합니다.

나는 어떤 레이아웃이 될 것이다 지정하는 가장 좋은 방법 궁금? (I 동일한 제어기에 3 개 이상의 상이한 레이아웃을 사용하고있다)

내가 사용 좋아하지 않는다

나는 일을 좋아했다

하지만 2 개 이상의 서로 다른 레이아웃을 지정하는 것을 사용할 수 없습니다.

예를 들면 :

나는 다른 레이아웃 이름과 다른 경우에만 옵션과 동일한 컨트롤러에 2 번 레이아웃을 호출 할 때, 첫 번째는 무시됩니다 - 이러한 작업은 내가 지정한 레이아웃에 표시되지 않습니다.

참고 : 나는 레일 2를 사용하고 있습니다.

해결법

  1. ==============================

    1.당신은 레이아웃을 설정하는 방법을 사용할 수 있습니다.

    당신은 레이아웃을 설정하는 방법을 사용할 수 있습니다.

    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
    
  2. ==============================

    2.당신은 단지 두 개의 레이아웃 사이에서 선택하는 경우 사용할 수 있습니다 만 :

    당신은 단지 두 개의 레이아웃 사이에서 선택하는 경우 사용할 수 있습니다 만 :

    class ProductsController < ApplicationController
       layout "admin", only: [:new, :edit]
    end
    

    또는

    class ProductsController < ApplicationController
       layout "application", only: [:index]
    end
    
  3. ==============================

    3.당신은 respond_to를 사용하여 개별 조치에 대한 레이아웃을 지정할 수 있습니다 :

    당신은 respond_to를 사용하여 개별 조치에 대한 레이아웃을 지정할 수 있습니다 :

      def foo
        @model = Bar.first
        respond_to do |format|
          format.html {render :layout => 'application'}
        end
      end
    
  4. ==============================

    4.또한 렌더링 사용하여 작업의 레이아웃을 지정할 수 있습니다 :

    또한 렌더링 사용하여 작업의 레이아웃을 지정할 수 있습니다 :

    def foo
      render layout: "application"
    end
    
  5. ==============================

    5.보석 (layout_by_action는) 그것을 위해있다 :

    보석 (layout_by_action는) 그것을 위해있다 :

    layout_by_action [:new, :create] => "some_layout", :index => "other_layout"
    

    https://github.com/barelyknown/layout_by_action

  6. ==============================

    6.컨트롤러에서 레이아웃을 지정하는 여러 가지 방법 :

    컨트롤러에서 레이아웃을 지정하는 여러 가지 방법 :

  7. ==============================

    7.정밀 :

    정밀 :

    레이아웃 필요 ( "@some를") 작업에 대한 귀하의 변수 후가 될하려면 다음을 정말하지만 작업 DRY의 방법은 위 참조하지만, 정밀 것입니다. 같이 :

    def your_action
       @some = foo
       render layout: "your_layout"
    end
    

    그리고하지 :

    def your_action
       render layout: "your_layout"
       @some = foo
       @foo = some
    end
    

    당신이 before_action을 할 경우 ... 그것의 또한 작동하지 않습니다.

    희망이 도움이.

  8. from https://stackoverflow.com/questions/3025784/rails-layouts-per-action by cc-by-sa and MIT license