Подтвердить что ты не робот

Как я могу явно объявить представление с контроллера Rails?

Я хочу явно вызвать представление из моего контроллера.

Сейчас у меня есть:

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

... затем он вызывает мое представление some_action.xml.builder. Как я могу вызвать другое представление? Есть ли параметр в response_to, я не хватает?

Спасибо,

В JP

4b9b3361

Ответ 1

Вы можете сделать что-то вроде следующего с помощью render:

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

Ответ 2

Смотрите раздел Раздел рендеринга документации 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}

Ответ 3

Вы также можете передать: действие или: контроллер, если это более удобно.

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

Ответ 4

Или даже проще, поскольку Rails > 3.0:

render "edit"

Ответ 5

Вы можете изменить внутренний 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

и используйте первое найденное представление.