2011-04-05 46 views
1

我正在使用块方法来打印列表,但它产生错误。ruby​​中的块方法

​​

,并用它作为

<%= my_data_list_for @leads, [" :10", "Age:30", "Contact:140", "Phone:140", "Email:180", "Company:100", ""] do |l| %> 
     <%= l.column do %> 
      <%= object.age %> 
     <% end %> 
    <% end %> 

其他方法

def list_headers(args=[]) 
    args = Array.new(args) 
    columns = [] 
    args.map { |o| columns << content_tag(:li, o.split(":").first, :style=>"width:#{o.split(":").second}px;") } 
    content_tag(:ul, columns.join(" ").html_safe, :class=>"list-headers") 
    end 

    def my_data_list_for(object, headers=[], &block) 
    arr = [] 
    object.each do |o| 
     arr = capture(DataListHelper::MyDataListBuilder.new(o), &block) 
    end 
    content_tag(:ol, list_headers(headers) + arr, :class=>"data-list") 
    end 

它产生一个错误,我想不通为什么:

ActionView::Template::Error (undefined local variable or method `object' for #<#<Class:0xcaa1ca0>:0xca9ebf4>): 

请帮助我在里面。

回答

1

这就解决了这个问题。

class MyDataListBuilder 
    include ActionView::Helpers::TagHelper 
    include ActionView::Helpers::CaptureHelper 
    attr_accessor :object, :output_buffer 

    def initialize(object) 
     @object  = object 
     @output_buffer = nil 
    end 

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