ruby-on-rails - Ruport - `each' :String 的未定义方法 ""

标签 ruby-on-rails ruby ruby-on-rails-3 reporting ruport

我正在关注本教程中的第一个示例:http://ruportbook.com/printable_documents.html , 但我一直在为 "":String 获取未定义的方法`each',我使用以下代码创建了一个新文件:

class MultiTableController < Ruport::Controller    
  stage :multi_table_report    
  class PDF < Ruport::Formatter::PDF    
    renders :pdf, :for => MultiTableController    
    build :multi_table_report do
      data.each { |table| pad(10) { draw_table(table) } }
      render_pdf
    end    
  end    
end

然后,在名为 workers_controller.rb 的现有 Controller 中,我有下一个操作:

  def index_report
    t1 = Table(%w[a b c]) << [1,2,3] << [4,5,6]
    t2 = Table(%w[a b c]) << [7,8,9] << [10,11,12]
    pdf = MultiTableController.render_pdf(:data => [t1,t2])
  end

然后,我的浏览器出现了这个错误:

undefined method `each' for "1":String

我试过很多其他的例子,但我得到了同样的错误。

有帮助吗?

最佳答案

each是 ruby​​ 1.8 中 String 的一个方法,在 Ruby 1.9 中被移除。

原因是 Unicode,或者更好的是 ruby​​ 1.9 的新编码可能性。

String #each 应该做什么?在每个字节或每个字符上循环? Ruby 无法为您决定,因此您必须使用 String#each_byteString#each_char

在 Ruby 1.8 中没有区别,一个字符就是一个字节。


编辑:

给肮脏的黑客一个机会:

class String
  alias :each :each_char
end

'aaaa'.each{|x| p x }

但是 ruport 在 Ruby 1.9 中似乎还有其他问题,可能会有副作用。 我不建议在更大的项目中使用这种 hack,但也许它适用于小脚本。

关于ruby-on-rails - Ruport - `each' :String 的未定义方法 "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10788770/

相关文章:

ruby-on-rails - 在 Rails 中安排一次性工作

ruby-on-rails - 在rake任务期间记录SQL查询

ruby-on-rails - Rails 更新属性

ruby-on-rails - ruby on rails devise gem 数据库在哪里

mysql - Nitrous.io :moving rails app to mysql

ruby-on-rails - ActiveRecord::DangerousAttributeError - 属性?由 ActiveRecord 定义

ruby-on-rails - 工具提示截断

mysql - Rails 查询变为空,但如果在 sql 控制台中搜索,相同的查询会检索记录

sql - 通过 'has_many'获取属性平均值

ruby - 我将整数更改为字符串,但#gsub 只能识别 0-9