Empezaron a trabajar con rails 3? Se dieron cuenta que las bases de datos con encoding UTF-8 no funcionan tan bien como esperan? Esto es porque la gema “mysql” trabaja con ASCII-8BIT encoding, pero ruby 1.9 y rails 3 trabajan con UTF-8, así que cuando crean un modelo se graba en la base de datos, pero cuando recuperan esos modelos de la base de datos, no muestra la información que uds. originalmente grabaron.
Cual es la solución? Bueno, hay 3, la más recomendada, usar la gema “mysql2″, para esto, editen el archivo Gemfile para incluirla:
gem "mysql2"
Y luego editen databases.yml y cambien el adaptador a mysql2
development: adapter: mysql2 database: fun_development user: root password: encoding: utf8
Otra solución, es simplemente en vez de usar la gema “mysql” usen la gema “ruby-mysql”, pero es muy lenta porque es una gema 100% ruby.
gem "ruby-mysql"
La última solución, es un monkey patch para seguir utilizando la gema mysql, pero también es lenta, así que de nuevo, recomiendo usar la gema mysql 2.
require 'mysql'
class Mysql::Result
def encode(value, encoding = "utf-8")
String === value ? value.force_encoding(encoding) : value
end
def each_utf8(&block)
each_orig do |row|
yield row.map {|col| encode(col) }
end
end
alias each_orig each
alias each each_utf8
def each_hash_utf8(&block)
each_hash_orig do |row|
row.each {|k, v| row[k] = encode(v) }
yield(row)
end
end
alias each_hash_orig each_hash
alias each_hash each_hash_utf8
end
Thanks a lot!!!
Comentario by Thiago — noviembre 21, 2010 @ 8:06 PM
[...] rapide passage sur StackOverflow m’a mené vers l’article suivant où il est mentionné que le gem mysql n’est pas compatible avec l’encodage UTF-8. Et [...]
Pingback by [Rails 3] Méfiez vous du gem mysql ! « FIX YOUR CODE — marzo 9, 2011 @ 9:24 PM
Thanks for your article. It helps me a lot!
Comentario by david — abril 20, 2011 @ 10:25 AM
Buenos días, soy nuevo en rails, vengo de .net y me cuesta un poco, estoy buscando una forma de que se creen los modelos automáticamente en rails, debido a que tengo una base de datos de muchas tablas, estuve leyendo que el Magic Model Generator in Rails no funciona en rails 3, conoces alguna forma de hacer esto?
Comentario by Luis — mayo 5, 2011 @ 12:37 PM
Es que si tenes una base de datos con muchas tablas, y generas los modelos, tarde o temprano vas a terminar utilizando esos modelos de alguna manera, por ende, no veo razón para generarlo automáticamente.
Generar un modelo por cada tabla no es un gran lío, si tu tabla se llama “clients”, basta con hacer
class Client < ActiveRecord::Base
end
y listo, ya tenes tu modelo, el tema esta en implementar las relaciones con otras tablas (en especial si tus tablas no siguen el estandard de rails) y si tenes nombres no estandarizados, vas a terminar haciendo cosas como:
class Client < ActiveRecord::Base
set_table_name "cliente"
has_many :users, :foreign_key => “USER_ID”
end
que igual sigue siendo algo muy sencillo.
Por otro lado, el tema de activerecord, como definir los modelos, las relaciones, y demás, suponiendo que tengas unas 100 tablas, no debería de llevarte más de 30-60 minutos, te recomiendo que hagas todo el tutorial que viene en el libro “agile web development with rails”, que te leas bien el capitulo más adelante en el libro sobre ActiveRecord y recién ahí escribas los modelos para tu base de datos, porque lo que tenes que hacer es realmente algo muy sencillo de hacer en rails si tenes los conocimientos básicos del framework.
Saludos
Comentario by admin — mayo 6, 2011 @ 11:37 AM
So are you saying that the database created with MySQL has to be created as UTF-8 database in order to work correctly with Ruby 1.9 and Rails 3.x ?
Comentario by Web Hosting — octubre 7, 2011 @ 10:26 AM
No, I’m saying that in order to support multi character encoding in rails 3 with utf8 (i.e: êûáú) you need the mysql2 gem, while on rails 2 applications you didn’t have any trouble by using the mysql gem.
Comentario by admin — octubre 7, 2011 @ 2:39 PM