2012-02-02 27 views
2

讓我們以PeopleController#show動作爲例。如果我需要根據應用程序以幾種不同的方式顯示一個人,該怎麼辦?我有幾個基於請求格式(js,html)的選項,但我真的需要更多。rails - 一個動作,很多模板 - rails的處理方式是什麼?

我可以做出不同的控制器動作,但我更喜歡保持我的控制器基本不變,除非我沒有明智的選擇。另一個想法是擁有一個case語句和一個模板參數,但這似乎也很麻煩(特別是如果某些視圖是針對某些用戶類型的話)。

我的問題是:什麼是軌道的方式來做到這一點?

people_controller.rb

def show 
    set_partial 
    respond_to do |format| 
    format.js 
    end 
end 

protected 
def set_partial 
    @template = case params[:template] 
       when 'small' then 'small_view' 
       when 'quick' then 'quick_view' 
       else 
        'full_view' 
       end 
end 

人/ show.js.erb

$('body').append("<%= escape_javascript(render partial: @partial) %>") 

回答

3

喜的朋友,這可能幫助你。

def show 
    respond_to do |format| 
    if (condition) 
    format.js { render :template => "small_view" } 
    #renders small_view.js.erb 
    format.html { render :template => "small_view" } 
    #renders small_view.html.erb 
    elsif (condition) 
    format.js { render :template => "quick" } 
    format.html { render :template => "quick" } 
    elsif (condition) 
    format.js { render :template => "full_view" } 
    format.html { render :template => "full_view" } 
    else 
    format.html 
    format.js 
    end 
    end 
end 
相關問題