从Rails中的helper方法捕获HTML输出

时间:2013-06-26 15:25:54

标签: ruby-on-rails haml partial-views renderpartial

我发现自己试图实现一个不完美的解决方案,以免破坏现有代码。

我在Rails助手类中有一个现有的辅助方法,它根据参数有选择地渲染多个部分中的一个:

  def render_widget_container(thingy)
    if thingy.is_awesome?
      render(partial: 'thingies/awesome', locals: {thingy: thingy })
    elsif thingy.sucks?
      render(partial: 'thingies/sucky', locals: {thingy: thingy })
    end
  end

在控制器中,我想捕获这个帮助器的输出,并把它作为JSON哈希中的一个值,如下所示:

@thingy = Thingy.find(params[:id])

respond_to do |format|
  format.json {
    {:name => "thingy 1", :html => render_widget_container(thingy) }
  }
end

我尝试了以下结果:

  1. render_widget_container(thingy)

    Render and/or redirect were called multiple times in this action.

  2. capture(render_widget_container(thingy))

    (eval):1: syntax error, unexpected $undefined
    $["<div id=\"video_container\"...
    ^
    (eval):1: syntax error, unexpected ']', expecting $end
    ...r'></div>\n  </div>\n</div>\n"] = ["<DIV ID=\"VIDEO_CONTAINE...
    ...    
    
  3. capture(render_to_string(render_widget_container(thingy)))

    *SHIT TON OF ESCAPED HTML* is not an ActiveModel-compatible object that returns a valid partial path.
    
  4. 除了为什么你想要做这样的事情之外的问题,我如何从我的助手中获取生成的HTML,在我的控制器内?

1 个答案:

答案 0 :(得分:0)

我只是捕获视图中的渲染动作,而不是尝试捕获控制器中的渲染输出。不是我原来问题的精确解决方案,但功能齐全。