我剛升級到Rails3,Ruby 1.9.2和最新的HAML gem。 用於工作這段代碼:HAML塊在yield上返回'0'嗎?
= allowed? do
= link_to('New', new_video_path)
現在allowed?
產生0
。
,如果我做它的工作原理:
= allowed?{ link_to('New', new_video_path) }
是怎麼回事?
我剛升級到Rails3,Ruby 1.9.2和最新的HAML gem。 用於工作這段代碼:HAML塊在yield上返回'0'嗎?
= allowed? do
= link_to('New', new_video_path)
現在allowed?
產生0
。
,如果我做它的工作原理:
= allowed?{ link_to('New', new_video_path) }
是怎麼回事?
你爲什麼首先回應那個輸出?你應該做的事:
- allowed? do
= link_to('New', new_video_path)
一般情況下,你永遠要與塊使用輸出運算符(=
)。以塊形式輸出的東西不會返回到塊;它直接連接到緩衝區。使用這樣的塊可能會導致內容亂序出現錯誤。
我這樣做通常,但Rails 3與一個棄用錯誤抱怨... – 2010-09-01 18:03:34
這花了我一段時間才能發現,但是這是你怎麼做:
def wrap_in_div(&block)
"<div>#{capture_haml(&block)}</div>"
end
的問題是,HAML送它到機架或其他地方之前輸出一切自己特殊的緩衝區。所以你必須讓haml首先調用這個塊並緩衝它。
做這個收益率的概念,讓最乾淨的方式,你想正確地捕捉到任何內容爲:
= allowed? do
- capture_haml do
= link_to('New', new_video_path)
在你的情況,不過,爲什麼不直接寫另一個助手方法?
def allowed_link_to(*args, &block)
opts = args.extract_options!
if allowed? args.last
link_to args.push(opts), &block
else
''
end
end
而且使用這樣的:
= allowed_link_to('New', new_video_path)
絕對使用'capture_haml' ...凱利,你幫我解決這個http://ruby-on-rails-eq8.blogspot .co.uk/2014/10/yielding-haml-block-will-return-0-zero.html謝謝 – equivalent8 2014-10-23 09:05:43
是什麼讓?做還是回?允許使用 – corroded 2010-09-01 15:34:24
?是我寫的一個寶石的幫手,RESTful_ACL。它會推斷出您要鏈接的URL,並根據模型級權限顯示它。它只是產生鏈接,或者根本沒有。 RESTful_ACL收到「0」,所以它肯定在HAML/Ruby級別。 – 2010-09-01 19:07:18
我有同樣的問題。當我使用'do'傳遞一個塊(只是一個字符串)給我的幫助器方法時,然後'yield'給我'1'(Fixnum)而不是字符串,並且該字符串在輔助方法之前單獨呈現。但是,使用'{}'傳遞的塊可以正常工作。 – Andrei 2011-05-06 15:01:40