Problema con validazioni rails e utf-8

Ciao a tutti,
sto avendo un problema con le validazioni di un modello e utf-8.
Ho l’unicit di un campo name, per se scrivo, ad esempio, due modelli
con name Joelle e Jolle, quando salvo il secondo fallisce la
validazione perch secondo rails sono lo stesso nome.
Il database mysql e le tabelle sono utf8 e in application.rb ho:

config.encoding = “UTF-8”

Se a mano inserisco i due nomi nel db non ci sono problemi e rails poi
me li mostra correttamente, il problema proprio la validazione del
modello.

Qualcuno sa come si risolve questo problema?

Grazie,
Tommaso

Non ho la soluzione… Ma hai provato dalla console Rails a vedere
l’encoding dei due valori che prova a salvare?


Riccardo

Il giorno 16/giu/2012, alle ore 14:54, Tommaso V.
[email protected] ha scritto:

Il 16 giugno 2012 14:54, Tommaso V. [email protected]
ha scritto:

mostra correttamente, il problema proprio la validazione del modello.
Ciao,

dicci di pi: che ruby? Che rails? Che sistema operativo? Come
configurato mysql? Che valore c’ nella configurazione di mysql per
default-character-set?

pietro

Il 17 giugno 2012 10:17, Tommaso V. [email protected]
ha scritto:

mi sa che mi sta sfuggendo qualcosa

Ciao,

ho appena provato con un’applicazione rails pulita, con:

class Person < ActiveRecord::Base
attr_accessible :name, :surname

validates :name, :uniqueness => true
end

E funziona senza problemi:

1.9.3p194 :001 > Person.create :name => ‘Joelle’, :surname => ‘Smith’
SQL (1.0ms) BEGIN
Person Exists (0.4ms) SELECT 1 FROM people WHERE people.name
= BINARY ‘Joelle’ LIMIT 1
SQL (1.3ms) INSERT INTO people (created_at, name, surname,
updated_at) VALUES (?, ?, ?, ?) [[“created_at”, Sun, 17 Jun 2012
09:32:50 UTC +00:00], [“name”, “Joelle”], [“surname”, “Smith”],
[“updated_at”, Sun, 17 Jun 2012 09:32:50 UTC +00:00]]
(29.1ms) COMMIT
=> #<Person id: 1, name: “Joelle”, surname: “Smith”, created_at:
“2012-06-17 09:32:50”, updated_at: “2012-06-17 09:32:50”>

1.9.3p194 :002 > Person.create :name => ‘Jolle’, :surname => ‘Smith’
SQL (0.1ms) BEGIN
Person Exists (0.4ms) SELECT 1 FROM people WHERE people.name
= BINARY ‘Jolle’ LIMIT 1
SQL (0.7ms) INSERT INTO people (created_at, name, surname,
updated_at) VALUES (?, ?, ?, ?) [[“created_at”, Sun, 17 Jun 2012
09:32:58 UTC +00:00], [“name”, “Jolle”], [“surname”, “Smith”],
[“updated_at”, Sun, 17 Jun 2012 09:32:58 UTC +00:00]]
(25.0ms) COMMIT
=> #<Person id: 2, name: “Jolle”, surname: “Smith”, created_at:
“2012-06-17 09:32:58”, updated_at: “2012-06-17 09:32:58”>

1.9.3p194 :003 > Person.create :name => ‘Jolle’, :surname => ‘Smith’
SQL (0.1ms) BEGIN
Person Exists (0.4ms) SELECT 1 FROM people WHERE people.name
= BINARY ‘Jolle’ LIMIT 1
(0.1ms) ROLLBACK
=> #<Person id: nil, name: “Jolle”, surname: “Smith”, created_at:
nil, updated_at: nil>

Guarda in development.log, come sono le query per verificare l’univocit.

pietro

Il 16/06/12 23:46, Pietro G. ha scritto:

Se a mano inserisco i due nomi nel db non ci sono problemi e rails poi me li
mostra correttamente, il problema proprio la validazione del modello.

Ciao,

dicci di pi: che ruby? Che rails? Che sistema operativo? Come
configurato mysql? Che valore c’ nella configurazione di mysql per
default-character-set?

ruby 1.9.3-p194
rails 3.2.5
Lo fa sia su mac che su linux, mysql installato senza configurazioni
particolari in entrambi i s.o.
Quando lancio rails console, la console utf-8
mi verrebbe da pensare che il problema non sia mysql ma rails dato che i
dati inseriti dalla console mysql funzionano, eppure dove ho controllato
tutto utf-8, mi sa che mi sta sfuggendo qualcosa

Il 17/06/12 11:47, Pietro G. ha scritto:

validates :name, :uniqueness => true
end

E funziona senza problemi:

Forse ho scoperto l’arcano, la validazione aveva l’opzione
case_sensitive a false:

validates_uniqueness_of :name, :case_sensitive => false

senza l’opzione (di default true) funziona.
Eppure da manuale non mi torna che debba funzionare cos:

:case_sensitive - Looks for an exact match. Ignored by non-text columns
(true by default).