Рендеринг частичного из helper_method

Итак, у меня есть вспомогательный метод в контроллере приложения:

def run_test(test_name)
  #computation stuff
  render :partial => test_name
end

И я называю это так во взглядах:

<%= run_test("testpartial") %>

и он обрабатывает нормально только с 1 (хотя... кажется, что частичное рендеринг возвращает массив, а не только частичное содержимое?), но если я дважды помещаю вызов помощника run_test в представление, я получаю двойную ошибку рендеринга, которая не должно происходить с частичными.

Есть идеи?

3 ответа

Решение

render в контроллере против render в представлении разные методы. Контроллер в конце концов вызывает render на вид, но контроллер render Сам метод ожидает вызова только один раз. Это выглядит так:

# Check for double render errors and set the content_type after rendering.
def render(*args) #:nodoc:
  raise ::AbstractController::DoubleRenderError if response_body
  super
  self.content_type ||= Mime[formats.first].to_s
  response_body
end

Обратите внимание, как он поднимается, если вызывается более одного раза?

Когда вы звоните helper_method вы даете представление прокси для версии контроллера render, который не предназначен для использования так же, как ActionView 's, который, в отличие от контроллера, будет вызываться повторно для рендеринга партиалов и так далее.

Похоже, в Rails 3.2 это просто работает:

# application_helper.rb
def render_my_partial
  render "my_partial"
end

Вы можете попробовать использовать render_to_string метод в представлении помощника

render_to_string :partial => test_name, :layout => false
Другие вопросы по тегам