2010-10-07 19 views
1

的Rails 2.2.2在Rails 2中產生一個幫助程序塊的方法呈現部分?

_competition.html.erb

<p>This is packed</p> 
<% pack do %> 
// some javascript 
<% end %> 

competitions_helper.rb

def pack(&block) 
    yield + 'PACKED' 
end 

但是 '裝在一起' 不會被追加到我的JavaScript字符串,它彷彿pack do有沒有效果。看起來有一些奇怪的事情與塊的上下文和實際的視圖渲染有關,因爲如果我刪除調用以在幫助器中產生並返回一個硬編碼的字符串,我不會從包中輸出。

回答

2
def pack(&block) 
    concat(capture(&block) + 'PACKED') 
end 
0

我沒有測試它,但你可以嘗試:

yield << 'PACKED' 

它是結合2串的只是以不同的方式。

+0

謝謝,但,這個問題是不是與串concat'd的方式。如果我不屈服,只是返回一個字符串,它按預期工作。調用yield可能會重新渲染部分(它將調用helper)。 – Kris 2010-10-07 14:32:12

0

作爲一種解決方法,暫時將javascript放在另一個部分,並使用render_to_string將它傳遞給幫助函數。而無需撥打yield作品。

<%= pack(render_to_string :partial => '_competition_javascript') %>