Рендеринг частичного из 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