【问题标题】:block method output is generating twice块方法输出生成两次
【发布时间】:2011-04-05 12:41:30
【问题描述】:

我写了一个块方法来打印一个列表

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 命令,因为它具有正确的列格式,另一个是由视图中的 on 块生成的,我该如何阻止它执行两次?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-plugins


    【解决方案1】:

    从行中删除=

    <%= options_menu do |m| %>
    

    【讨论】:

    • 我删除了=,但它仍然提供了两次输出。
    【解决方案2】:

    如果块是直接的(不是“视图块”),我不会使用capture

    content_tag(:li, block.call(self))
    

    【讨论】:

    • 我试过这个,我尝试了每件事,但仍然无法弄清楚为什么它会给出双重输出。
    • 我猜您也尝试过在
    • 完整的代码在这个link中列出,更新的问题在这个question中列出
    【解决方案3】:

    解决方案现已发布在discussion

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2017-12-04
      • 2014-01-03
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多