我想明確地從我的控制器調用視圖。如何從Rails控制器顯式聲明視圖?
現在我有:
def some_action
.. do something ...
respond_to do |format|
format.xml
end
end
...然後叫我some_action.xml.builder視圖。我怎樣才能打電話給其他人?在respond_to中是否有一個參數我錯過了?
感謝,
JP
我想明確地從我的控制器調用視圖。如何從Rails控制器顯式聲明視圖?
現在我有:
def some_action
.. do something ...
respond_to do |format|
format.xml
end
end
...然後叫我some_action.xml.builder視圖。我怎樣才能打電話給其他人?在respond_to中是否有一個參數我錯過了?
感謝,
JP
你可以做下面的內容通過渲染,如:
respond_to do |format|
format.html { render :template => "weblog/show" }
end
見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}
您還可以通過:動作,或者:控制器,如果這更方便。
respond_to do |format|
format.html { render :action => 'show' }
end
甚至簡單,因爲Rails > 3.0:
render "edit"
您可以通過在控制器中這樣修改控制器的內部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
並使用第一個發現的圖。