2013-10-15 53 views
4

所以我想改變基於url參數的視圖佈局。基於URL參數的Rails設置佈局

到目前爲止,我想通了,我必須在控制器中設置佈局。在我的控制器下顯示動作,我有:

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

好像應該工作。雖然現在我得到︰ 無法呈現佈局︰未定義的局部變量或方法'自動銷售'爲# 試用它的應用程序,但得到了同樣的錯誤。我需要告訴它佈局在哪裏或什麼的? –

+0

@KevinZ嘗試使用''vendored''而不是符號也需要設置默認佈局,如果不是true – tihom

7

另外,我覺得這是比較容易理解:

class YourController < ApplicationController 
    layout :iframe_layout 

    private 

    def iframe_layout 
    params['iframe'] ? "vendored" : "application" 
    end 
end