2009-08-13 2 views

ответ

0

Решают макет в контроллере, а затем модель. Ваш ProjectController может использовать собственный ProjectLayout, а MessageController может использовать обычный макет, если хотите.

2

Вы можете использовать только макеты на уровне контроллера:

class MessagesController < ApplicationController 
    layout :project 
end 

Layout method documentation есть пример о том, как сделать условные макеты

2

Кроме того, поскольку этот вопрос неясен, вы можете также установить раскладку только одно действие с опцией рендеринга.

render :action => 'new', :layout => 'layoutname' 
16

это может помочь вам

class MessagesController < ApplicationController 
    layout :get_layout 

    def get_layout 
    @project? ? 'ProjectLayout' : 'NormalLayout' 
    end 

end 
1

Вы можете использовать только макеты рельсов на controller уровне и индивидуальных action уровнях.

Уникальный макет в для каждого контроллера

class MessagesController < ApplicationController 
    layout "admin" 

    def index 
    # logic 
    end 
end 

** выше линии layout "admin" будет загрузить расположение ADMIN каждый раз, когда контроллер получает сообщение вызывается. Для этого необходимо иметь макет, созданный в файле layouts/admin.html.rb. **

Динамический макет для каждого контроллера

class MessagesController < ApplicationController 
    layout :dynamic_layout 

    def index 
    # logic 
    end 

protected 
def dynamic_layout 
    if current_user.admin? 
     "admin"  # Show admin layout 
    else 
    "other_layout" # Show other_layout 
    end 
    end 
end 

# Индивидуальные действия Уровень Макеты Если вы хотите отобразить различные схемы каждое действие вы можете сделать это.

class MessagesController < ApplicationController 
    layout :dynamic_layout 

    def index 
    # logic 
    render :action => 'index', :layout => 'index_layout' 
    end 

    def show 
    # logic 
    render :action => 'show', :layout => 'show_layout' 
    end 
end 
0

Мои два цента в ApplicationController:

before_action :layout_by_action 

@@actions = %w(new edit create update index) 

def layout_by_action 
    if @@actions.include? params[:action] 
    self.class.layout 'admin' 
    else 
    self.class.layout 'application' 
    end 
end 
Смежные вопросы