Рендеринг частичного из helper_method - PullRequest
8 голосов
/ 03 сентября 2011

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

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

И я называю это так в представлениях:

<%= run_test("testpartial") %>

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

Есть идеи?

Ответы [ 3 ]

8 голосов
/ 03 сентября 2011

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, что , в отличие от контроллера, ожидается, что он будет вызываться повторно для рендеринга партиалов и тому подобного.

5 голосов
/ 07 августа 2013

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

# application_helper.rb
def render_my_partial
  render "my_partial"
end
0 голосов
/ 03 сентября 2011

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

render_to_string :partial => test_name, :layout => false
...