блочный метод выводится дважды - PullRequest
1 голос
/ 05 апреля 2011

Я пишу блочный метод для печати списка

def column (&block)
  if block_given?
    content_tag(:li, capture(self, &block))
  else
    content_tag(:li, "")
  end
end

и используя его как

<%= data_list_for @leads, [" :10", "Age:30", "Contact:140", "Phone:140", "Email:180", "Company:100", ""] do |l| %>
    <%= l.column { |c| link_to "&nbsp;".html_safe, "leads/details/#{c.object.id}", :class=>:plus, :remote=>true } %>
    <%= l.column { |c| c.object.age } %>
    <%= l.column { |c| c.object.contact.complete_name } %>
    <%= l.column { |c| c.object.contact.phones.blank? ? "-" : c.object.contact.phones.first.phone_number } %>
    <%= l.column { |c| c.object.contact.emails.blank? ? "-" : c.object.contact.emails.first.email } %>
    <%= l.column { |c| c.object.company.title } %>
    <%= l.column do |c| %>
        <%= options_menu do |m| %>
            <%= m.item link_to 'Show', lead_path(c.object) %>
            <%= m.item link_to 'Edit', edit_lead_path(c.object) %>
            <%= m.item link_to 'New Note', "leads/#{c.object.id}/notes/new", :class=>"display-newxdoc", :id=>c.object.id %>
            <%= m.item link_to 'Create Opportunity', new_lead_opportunity_path(c.object) %>
        <% end %>
    <% end %>
<% end %>

Все работает нормально. Но единственная проблема в том, что options_menu генерирует дважды. Значит есть два option_menus. Я обнаружил, что одно меню из команды l.column, потому что оно имеет правильное форматирование столбца, другое генерируется его включенным блоком в представлении. Как я могу остановить его для выполнения дважды?

Ответы [ 3 ]

0 голосов
/ 05 апреля 2011

Я бы не использовал capture, если блок является прямым (не «блок просмотра»):

content_tag(:li, block.call(self))
0 голосов
/ 07 апреля 2011

Решение опубликовано в обсуждении .

0 голосов
/ 05 апреля 2011

Удалить = с линии

<%= options_menu do |m| %>
...