1

我寫一個塊的方法來打印列表塊法輸出產生兩次

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命令中找到了一個菜單,因爲它具有正確的列合成格式,另一個菜單是由它在視圖中的塊生成的,我怎樣才能阻止它執行兩次?從線

回答

0

刪除=

<%= options_menu do |m| %> 
+0

我刪除了那個'='但仍然給它兩次輸出。 – 2011-04-05 12:48:49

0

我不會使用capture如果塊是直接的(不是「視圖塊」):

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

我試過這個,我嘗試了所有的東西,但仍然無法弄清楚爲什麼它給出了雙倍的輸出。 – 2011-04-06 05:08:13

+0

我猜你也嘗試過沒有在<%= data_list_for(這是肯定的,塊視圖不使用=)。你可以顯示這個幫手方法的代碼嗎? – tokland 2011-04-06 07:05:28

+0

完整的代碼在此[鏈接](https://gist.github.com/905258)中列出並更新的問題在此[問題]中列出(http://stackoverflow.com/questions/5562658/multi-level-塊方法-是產生-問題) – 2011-04-06 07:15:35