Ответ 1
Вы можете сделать что-то вроде следующего с помощью render:
respond_to do |format|
format.html { render :template => "weblog/show" }
end
Я хочу явно вызвать представление из моего контроллера.
Сейчас у меня есть:
def some_action
.. do something ...
respond_to do |format|
format.xml
end
end
... затем он вызывает мое представление some_action.xml.builder. Как я могу вызвать другое представление? Есть ли параметр в response_to, я не хватает?
Спасибо,
В JP
Вы можете сделать что-то вроде следующего с помощью render:
respond_to do |format|
format.html { render :template => "weblog/show" }
end
Смотрите раздел Раздел рендеринга документации ActionController:: Base для разных способов управления рендерингом.
Вы можете указать 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
и используйте первое найденное представление.
Использовать рендеринг
http://api.rubyonrails.com/classes/ActionController/Base.html#M000474