HAML块在收益率上返回“0”?

时间:2010-09-01 15:28:46

标签: ruby ruby-on-rails-3 haml block yield

我刚刚升级到Rails3,Ruby 1.9.2和最新的HAML gem。 这段代码曾经工作过:


  = allowed? do
    = link_to('New', new_video_path)

现在allowed?会产生0

如果我这样做,那就有效:


  = allowed?{ link_to('New', new_video_path) }

是什么给出了?

3 个答案:

答案 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调用该块并缓冲它。