我刚刚升级到Rails3,Ruby 1.9.2和最新的HAML gem。 这段代码曾经工作过:
= allowed? do
= link_to('New', new_video_path)
现在allowed?
会产生0
。
如果我这样做,那就有效:
= allowed?{ link_to('New', new_video_path) }
是什么给出了?
答案 0 :(得分:1)
最简洁的方法是产生概念,允许您想要正确捕获的任何内容:
= 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)
答案 1 :(得分:0)
为什么你首先回应那个输出?你应该这样做:
- allowed? do
= link_to('New', new_video_path)
通常,您永远不想将输出运算符(=
)与块一起使用。块中输出的东西不会返回到块中;它直接连接到缓冲区。使用这样的块可能会导致内容无序错误。
答案 2 :(得分:0)
我花了一些时间才找到,但这就是你的做法:
def wrap_in_div(&block)
"<div>#{capture_haml(&block)}</div>"
end
问题是haml会将所有内容输出到自己的特殊缓冲区,然后再将其发送到机架或任何地方。所以你必须先让haml调用该块并缓冲它。