Ruport - undefined method `chaque " pour “”:String
désolé pour mon anglais.
Je suis ce tuto: http://ruportbook.com/printable_documents.html, le premier exemple, mais j'ai undefined method `chaque " pour "":Chaîne de tous les temps, j'ai créé un nouveau fichier avec ce code:
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
Puis, dans un contrôleur nommé workers_controller.rb j'ai mis l'action suivante:
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
J'ai ajouté cette route pour les routes.rb, bien sûr.
puis, j'ai cette erreur sur mon navigateur:
undefined method `each' for "1":String
Mais l'erreur n'est pas seulement se produire avec cet exemple, j'ai essayé beaucoup d'autres exemples et j'obtiens la même erreur.
De l'aide?
Thks à l'avance!
Ce qui concerne.
- Pouvez-vous montrer dans ce qui erreur de chaîne heppens? Ne ressemble à ce code utilise directement
each
surString
- Comme vous pouvez le voir ci-dessus, l'erreur est qui se passe à "1" de la chaîne, j'ai changé t1 = Tableau(%w[a b c]) << [1,2,3] << [4,5,6] pour t1 = Tableau(%w[a b c]) << [[1],[2],[3]] << [[4],[5],[6]] pour obtenir un peu d'un autre indice, mais l'erreur est maintenant: undefined method `chaque' pour "[1]":Chaîne :/
Vous devez vous connecter pour publier un commentaire.
each
a été une méthode deString
en ruby 1.8 et il a été supprimé en Ruby 1.9.La raison en était Unicode, ou mieux les nouvelles possibilités de codage de ruby 1.9.
Ce qui devrait
String #each
faire? Boucle sur chaque octet ou chaque personnage? Ruby ne peux pas décider pour vous, donc vous devez utiliserString#each_byte
ouString#each_char
.En Ruby 1.8 il a pas de différence, un personnage était un octet.
Edit:
Juste donner une sale pirater un hasard:
Mais ruport semble avoir d'autres problèmes avec Ruby 1.9 et il peut y avoir des effets secondaires.
Je ne recommanderais pas ce hack dans un projet plus vaste, mais peut-être qu'il travaille dans de petits scripts.
String.each
dans 1.8.7 fonctionne avec les lignes, pas avec des octets ou de caractères.En 1.9 utilisation
String.split("\n").each
au lieu deString.each
. Mais attention,split
couper délimiteur, doncString.each
donner de la chaîne se termine par "/n", quandString.split("\n").each
donner de chaîne sans "\n" à la fin.