Загрузка...

Ruby & Rails: веб-разработка с удовольствием

Ruby on Rails — фреймворк для создания веб-приложений. Является открытым программным обеспечением (лицензия MIT). Здесь мы обсуждаем новости RoR, делимся учебными материалами и интересными находками С RoR даже сложные веб-приложения могут быть написаны за считанные дни. Это действительно разработка с удовольствием!
     

helper принимающий на вход блок

30.04.09, 09:49
Автор ggg

Время от времени возникает потребность написать helper, который принимает на вход блок, как например стандартный content_tag. Конечно же специалисты в rails знают как это сделать, но вот у таких новичков как я могут возникнуть определенные трудности. Рассмотрим, как это можно сделать.

  def helper_with_block_param(&block)
    block_content = capture(&block)
    content = content_tag(:div, :class => :super_div) do
      content_tag(:div, block_content, :class => :confedential_notice_content)
    end
    concat(content, block.binding)
  end

Разберемся в этом коде поподробнее:

Функция capture позволяет поместить вывод блока в какую-то переменную для дальнейшего использования, а функция concat - выводит результирующий текст во вьюшку, где вызывается данный хелпер.

После написания такого хелпера мы можем использовать его таким образом:

< % helper_with_block_param do %>
привет
< % end %>

Комментарии

прошу заметить, что с недавних пор в функции concat 1 параметр

да, вы совершенно правы, но у нас используется достаточно древний rails 2.0.2, поэтому там еще пока что 2 параметра у функции concat

У Бейтса есть скринкаст как раз на эту тему http://railscasts.com/episodes/40-blocks-in-view

Войдите, чтобы оставить комментарий