我正在尝试在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
或类似内容的内容。
任何人都知道如何解决这个问题?感谢
答案 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}}是一个类变量,用于在内部检测渲染引擎。