我正在关注本教程中的第一个示例: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_byte
或 String#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/