简体   繁体   English

Ruby中的块方法

[英]block methods in ruby

I am using a block method to print a list, but it is generating error. 我正在使用块方法来打印列表,但它会生成错误。

  class MyDataListBuilder
    attr_accessor :object

    def initialize(object)
      @object = object
    end

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

and using it as 并将其用作

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

other methods are 其他方法是

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

it is generating an error and i can not figure out why: 它生成一个错误,我不知道为什么:

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

Please help me in it. 请帮我。

This solves the issue. 这样就解决了问题。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM