2014-10-02 18 views
0

我想在Padrino中實現一個嵌套窗體,我可以在界面中使用按鈕Add whatever來添加子對象的多個實例。如何將模板呈現給Padrino中的變量?

在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 (...)塊沒有按」 t呈現給template變量,但是顯示在佈局中。

我試圖在Padrino框架中找到類似render_to_string或類似的東西。

任何人都知道如何解決這個問題?謝謝

回答

1

這不是render這是失敗的你,它的fields_for。它錯誤地檢測到它是從你的erb模板中調用並連接到它。

本質上是真的,因爲你從你的erb中調用link_to_add_fields,但是當時沒有檢測方法來猜測這個從erb到ruby和雙擊的雙重跳躍。

它可以被認爲是一個錯誤,你可以在這裏創建一個問題https://github.com/padrino/padrino-framework並提供一個帶有鎖定Gemfile的最小失敗項目。

作爲一個解決方案,我可以建議你手動切換的渲染引擎紅寶石和背部像這樣:

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 

@current_engine是用於檢測渲染引擎內部類變量。

+0

非常感謝您的回答。我會在Padrino的Github回購上發佈一個問題,並與他們討論這個問題! – jdscosta91 2014-10-07 23:45:27

相關問題