我正在遵循本教程中的第一个示例:http://ruportbook.com/printable_documents.html 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的现有控制器中,我有下一步操作:
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
是一种方法String
在 ruby 1.8 中,它在 Ruby 1.9 中被删除。
原因是 Unicode,或者更好的是 ruby 1.9 的新编码可能性。
什么应该String #each
做?循环每个字节或每个字符? Ruby 无法为你决定,所以你必须使用String#each_byte
or String#each_char
.
在 Ruby 1.8 中没有区别,一个字符就是一个字节。
Edit:
给肮脏的黑客一个机会:
class String
alias :each :each_char
end
'aaaa'.each{|x| p x }
但ruport在Ruby 1.9上似乎还存在其他问题,并且可能会有副作用。
我不会在更大的项目中推荐这种技巧,但也许它适用于小脚本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)