2008-11-07 19 views
17

我想明確地從我的控制器調用視圖。如何從Rails控制器顯式聲明視圖?

現在我有:

def some_action 
    .. do something ... 
    respond_to do |format| 
    format.xml 
    end 
end 

...然後叫我some_action.xml.builder視圖。我怎樣才能打電話給其他人?在respond_to中是否有一個參數我錯過了?

感謝,

JP

回答

37

你可以做下面的內容通過渲染,如:

respond_to do |format| 
    format.html { render :template => "weblog/show" } 
end 
14

Rendering section of the ActionController::Base documentation你可以控制呈現什麼樣的不同方法。

你可以告訴Rails渲染這樣一個特定的視圖(模板):

# Renders the template located in [TEMPLATE_ROOT]/weblog/show.r(html|xml) (in Rails, app/views/weblog/show.erb) 
    render :template => "weblog/show" 

# Renders the template with a local variable 
    render :template => "weblog/show", :locals => {:customer => Customer.new} 
5

您還可以通過:動作,或者:控制器,如果這更方便。

respond_to do |format| 
    format.html { render :action => 'show' } 
end 
2

您可以通過在控制器中這樣修改控制器的內部lookup_context

before_filter do 
    lookup_context.prefixes << 'view_prefix' 
end 

和控制器將嘗試加載view/view_prefix/show.html迴應show請求後查找列表中的所有其他視圖前綴。默認列表通常是application和當前控制器的名稱。

class MagicController 
    before_filter do 
    lookup_context.prefixes << 'secondary' 
    end 

    def show 
    # ... 
    end 
end 

app.get '/magic/1` 

GET請求將尋找以下順序的圖:

  • view/application/show.erb
  • view/magic/show.erb
  • view/secondary/show.erb

並使用第一個發現的圖。

相關問題