Блок HAML, возвращающий `0` на выходе? - PullRequest
3 голосов
/ 01 сентября 2010

Я только что обновился до Rails3, Ruby 1.9.2 и последней версии гема HAML. Этот код работал:


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

Теперь allowed? дает 0.

Это работает, если я делаю:


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

Что дает?

Ответы [ 3 ]

1 голос
/ 30 апреля 2013

Самый простой способ реализовать эту концепцию выхода, чтобы разрешить правильный захват любого содержимого, это:

= 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)
0 голосов
/ 19 марта 2013

Мне понадобилось некоторое время, чтобы найти, но вот как вы это делаете:

def wrap_in_div(&block)
  "<div>#{capture_haml(&block)}</div>"
end

Проблема в том, что haml выводит все в свой специальный буфер перед отправкой в ​​стойку или где-либо еще.Поэтому вы должны позволить haml сначала вызвать блок и буферизировать его.

0 голосов
/ 01 сентября 2010

Почему вы отражаете вывод этого в первую очередь? Вы должны делать:

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

Как правило, вы никогда не хотите использовать оператор вывода (=) с блоком. Материал, выведенный в блоках, не возвращается в блок; он concat'd непосредственно в буфер. Использование такого блока может привести к ошибкам с содержимым не по порядку.

...