Forum: Italian Ruby user group Problema con validazioni rails e utf-8

Posted by Tommaso Visconti (Guest)
on 2012-06-16 14:54
(Received via mailing list)
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
Posted by Riccardo Lucatuorto (riccardo_l)
on 2012-06-16 17:24
(Received via mailing list)
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 Visconti
<tommaso.visconti@gmail.com> ha scritto:
Posted by Pietro Giorgianni (giorgian)
on 2012-06-16 23:47
(Received via mailing list)
Il 16 giugno 2012 14:54, Tommaso Visconti <tommaso.visconti@gmail.com>
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
Posted by Tommaso Visconti (Guest)
on 2012-06-17 10:18
(Received via mailing list)
Il 16/06/12 23:46, Pietro Giorgianni 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
Posted by Pietro Giorgianni (giorgian)
on 2012-06-17 11:47
(Received via mailing list)
Il 17 giugno 2012 10:17, Tommaso Visconti <tommaso.visconti@gmail.com>
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
Posted by Tommaso Visconti (Guest)
on 2012-06-17 15:05
(Received via mailing list)
Il 17/06/12 11:47, Pietro Giorgianni 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).
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.