Rails个人课程每个例程

时间:2013-09-13 11:53:37

标签: ruby-on-rails ruby

我在某些红宝石和铁轨领域是个新手。所以我正在编写一个类,根据扩展名读取excel并返回每个例程中的行。像这样:

class ExcelRead
  (dependencies)

  def initialize(path, sheet_n = 0)
    type = File.extname(path)

    if type == JitExcelRead::XLS
      Spreadsheet.client_encoding = 'UTF-8'
      book = Spreadsheet.open path
      book_sheet = book.worksheet sheet_n
    elsif type == JitExcelRead::XLSX
      book = Creek::Book.new path
      book_sheet = book.sheets[sheet_n]
    end

    @book = book
    @book_sheet = book_sheet
    @book_rows = book_sheet.rows
    @path = path
    @type = type
  end
end

所以这意味着我打电话给我的申请

xls = ExcelRead.new(uploaded_file.filename_path)

一切顺利。我有我需要的物品供我使用。我现在的问题是如何迭代它们。我认为可以像这样添加一个类的方法

  def each
    binding.pry
  end

并在我的应用上正常调用

xls.book_rows.each do |row|
end

会让我输入该代码,但不是真的......

帮助?

1 个答案:

答案 0 :(得分:0)

如果您向each类添加了ExcelRead方法,并且创建了此类名为xls的实例,那么您必须使用xls.each访问它,不是xls.book_rows.each 使用前者,您从each调用Enumerator方法,因为book_rows是一个集合。
我只能猜测你想要一种自定义方式迭代你的book_row,所以我认为这样的事情应该是你想要实现的目标:

def iterate
  self.book_rows.each do |br|
    # do stuff
  end
end

你称之为:

xls.iterate

但这只是一个疯狂的猜测。