2011-04-05 5 views
1

블록 인쇄 방법을 사용하여 목록을 인쇄하고 있지만 오류가 발생합니다. 그것을 사용 루비의 블록 메소드

class MyDataListBuilder 
    attr_accessor :object 

    def initialize(object) 
     @object = object 
    end 

    def column (&block) 
     content_tag :li, block.call 
    end 
    end 

<%= 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