2010-12-04 37 views
1

這是一種扭曲我的麪條。無法在導軌中禁止嵌套塊幫助器中的輸出3

我有類似的東西這(在Rails 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

如果修改helper方法以傳入self,這將是當前視圖實例,然後用它來捕獲,則可能不會出現此問題。用您所使用的幫助器替代提供的視圖實例。

+0

這是一個絕妙的主意:D完美的工作 – 2010-12-04 06:12:18