8

好的,所以我在应用程序控制器中有一个辅助方法:

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

我在视图中这样称呼它:

<%= run_test("testpartial") %>

并且它只用 1 渲染就可以了(尽管......渲染部分似乎正在返回一个数组而不仅仅是部分内容?),但是如果我将 run_test 助手调用两次放在视图中,我会得到一个双重渲染错误,哪个不应该发生在局部。

有任何想法吗?

4

3 回答 3

9

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 不同,与控制器不同,它预期会被重复调用以渲染部分和诸如此类的东西。

于 2011-09-03T03:29:45.800 回答
5

看起来在 Rails 3.2 中这很有效:

# application_helper.rb
def render_my_partial
  render "my_partial"
end
于 2013-08-07T09:56:34.997 回答
-2

您可以尝试render_to_string在视图助手中使用方法

render_to_string :partial => test_name, :layout => false
于 2011-09-03T04:02:44.567 回答