2010-01-20 4 views
16

папку Мои приложения/просмотров/макеты выглядит следующим образом:установить макет для определенных действий?

application.html.erb 
user_sessions.html.erb 
errors.html.erb 

Они работают хорошо, и у меня нет никаких проблем с ними, но ид сейчас хотел бы добавить новый макет советы, но только по индексу и показать действия ,

Будет ли «tips.index.html.erb» работать?

ответ

32

Добавить новый макет, как вы, как называется «tips.html.erb»

В контроллере советы добавить следующее:

layout "tips", :only => [ :index, :show ] 

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

def new 
    render(:layout => "layouts/application") 
end 

Я никогда не пробовал использовать несколько деклараций макета в контроллере. Может быть, добавив еще один

layout "standard", :only => [ :new, :edit ] 

может работать ...

+0

с использованием нового/редактирования использовать не файл макета. – Arcath

+0

Я обновил свой ответ - надеюсь, что это работает! – dtt101

+0

Стоит упомянуть, что вы не можете многократно называть 'layout' несколько раз в контроллере , поскольку будет оцениваться только последний вызов. Вместо этого (в рельсах 4 на наименее) вы можете вызвать 'layout', передавая символ метода. Затем метод может динамически возвращать разные имена шаблонов. См. [макет] (http://api.rubyonrails.org/classes/AbstractController/Layouts/ClassMethods.html#method-i-layout). –

4

Если вы хотите использовать несколько макет в контроллере, используйте код ниже: (action_name является предопределенным переменным, которую вы могли бы использовать непосредственно в Rails)

class OrdersController < BaseController 
    layout :determine_layout 

private 
    def determine_layout 
    %w(new).include?(action_name) ? "some_layout" : "public" 
    end 
end 

см: https://stackoverflow.com/a/5525014/445908

Смежные вопросы