2010-12-04 5 views
1

これは私の麺をひねります。レールのネストされたブロックヘルパーの出力を抑止できません3

(それが重要ならば、レール3エンジンで)私はすべてが素晴らしいワークアウトされていますが、そのネストされた静的なコンテンツが二回出力を取得している

class Builder 
    def initialize 
    @foos = [] 
    end 

    def foo(&block) 
    @foos << helper.capture(&block) #helper being a class that is including ActionView::Helpers 
    end 

    def to_html 
    @foos.join "\n" 
    end 
end 

module ApplicationHelper 
    def widget 
    b = Builder.new 
    yield b 

    b.to_html 
    end 
end 

#in a view somewhere 
<%= widget do |b| %> 
    <% b.foo do %> 
    static content 
    <% end %> 
<% end %> 

これに似た何かを持っている - 私はそれを配置したい場所を一度、および一度widgetが呼び出された。

私が読んだことから、captureはこの正確な問題に対処することになっています。私はかなり問題が私は(ActionView::Helpersを含むダミーのプロキシクラスから)呼び出していることに起因すると確信していますが、問題は、b.foo呼び出しは、混合されるもののコンテキストからではなく、クラスインスタンス上のメソッドを呼び出すテンプレートに挿入します。

この問題を回避する方法はありますか?あるいは私は間違った方向からこれに近づいています。私は公平に関係するものをモデル化しようとしており、apiに本当に満足しています。この問題を解決できないようです。

答えて

2

現在のビューインスタンスとなるselfを渡すヘルパーメソッドを変更し、これをキャプチャに使用すると、この問題は発生しない可能性があります。提供されているビューインスタンスの代わりにヘルパーを使用します。

+0

それは素晴らしいアイデアでした:D完全に働いた –

+0

これは私をナッツを運転していた...解決に感謝! –

+0

上記の問題を解決したコードを記述できますか? –

関連する問題