如何在Padrino中将模板渲染为变量?

时间:2014-10-02 10:12:59

标签: ruby-on-rails nested-forms padrino form-helpers

我正在尝试在Padrino中实现一个嵌套表单,我可以使用界面中的Add whatever按钮添加子对象的多个实例。

在Rails中,执行此操作的一种方法是创建一个帮助程序,每次单击Add whatever按钮时都会生成嵌套字段:

def link_to_add_fields( text, f, association, target )

  new_object    = f.object.class.reflect_on_association(association).klass.new
  template_path = "#{association}/fields" 

  template = f.fields_for(association, new_object) do |builder|
    render(template_path, :f => builder)
  end

  link_to text, "#", onclick: "add_#{association}_fields(this, \"#{escape_javascript(template)}\", \"#{target}\")"

end

但是,当我尝试在Padrino中执行此操作时,f.fields_for (...)块不会呈现给template变量,而是显示在布局中。

我正在尝试在Padrino框架中找到类似render_to_string或类似内容的内容。

任何人都知道如何解决这个问题?感谢

1 个答案:

答案 0 :(得分:1)

render你没有fields_for失败, def my_rendery_helper @current_engine, engine_was = nil, @current_engine template = fields_for(:moo) do |builder| render('moo') end @current_engine = engine_was template # now contains a SafeBuffer string 'result' end 。它错误地检测到它是从你的erb模板中调用并连接到它。

本质上它是真的,因为你从你的erb调用link_to_add_fields,但当时没有检测方法可以猜测从erb到ruby再回来的双重潜水。

可以将其视为一个错误,您可以在https://github.com/padrino/padrino-framework创建一个问题,并提供一个锁定Gemfile的最小失败项目。

作为一种解决方案,我建议您手动将渲染引擎切换为ruby并返回如下:

@current_engine

{{1}}是一个类变量,用于在内部检测渲染引擎。