2013-10-15 4 views
4

Итак, я пытаюсь изменить макет представления на основе параметров url.Rails Set Layout на основе URL Params

До сих пор я выяснил, что мне нужно установить макет в контроллер. В мой контроллер под действием шоу у меня есть:

if params['iframe'] == 'true' 
    render :layout => 'vendored' 
end 

Компоновка «vendored» существует просмотров/макеты. Я получаю страшный рендеринг несколько раз. Вот остальная часть действия шоу в моем контроллере:

def show 
    @event = Event.find(params[:id]) 
    @user = current_user 
    @approved_employers = current_user.get_employers_approving_event(@event) if user_signed_in? 
    respond_with(@event) 

Проблема в том, что я не вижу другого рендера. Я не вижу другого во всем контроллере. Конечно, есть рендер где-то, потому что он отображает мой макет приложения по умолчанию, является ли причиной проблемы? Я прочитал в рельсах документы, которые я могу добавить

and return 

до конца, и это должно решить эту проблему, но не уверен, куда положить, что, поскольку два делает не рядом друг с другом. Я также не вижу никаких других redirect_to. Где я должен искать этот другой рендер? Это проблема?

+0

FWIW, respond_with в конечном итоге вызывает визуализации ... –

ответ

3

См. Это answer. В вашем случае:

before_filter :set_layout, :only => [:show] 

    private 

    def set_layout 
    self.class.layout (params['iframe'] == 'true' ? 'vendored' : 'application') 
    end 
+0

Похоже, должно работать. Хотя теперь я получаю: Не удалось выполнить рендеринг макета: неопределенная локальная переменная или метод 'vendored 'для # Пробовал тоже приложение, но получил ту же ошибку. Нужно ли мне рассказывать, где находится макет или что-то еще? –

+0

@KevinZ попробуйте использовать '' vendored'' вместо символа также необходимо установить макет по умолчанию, если не верно – tihom

7

В качестве альтернативы, я думаю, что это легче понять:

class YourController < ApplicationController 
    layout :iframe_layout 

    private 

    def iframe_layout 
    params['iframe'] ? "vendored" : "application" 
    end 
end 
Смежные вопросы