Globalize, i18n.locale in maiuscolo

Ciao,
ho una classe così definita:

class Event < ActiveRecord::Base
translates :nome, :descrizione
# other stuff…
end

Su database ho definito la tabella di traduzione con campo locale di
tipo enum(‘IT’, ‘EN’) , come da screenshot allegata. Il problema è che
Globalize2 (Rails2) costruisce le query con campo locale in minuscolo e
non trova la corrispondenza corretta.

Questo è un esempio di query generata da Globalize2:

SELECT * FROM event_translations WHERE (event_translations.locale
IN (‘it’)) AND (event_translations.event_id = 1406)

Io vorrei diventasse così:

SELECT * FROM event_translations WHERE (event_translations.locale
IN (‘IT’)) AND (event_translations.event_id = 1406)

Ho provato a forzare da controller la variabile i18n.locale in maiuscolo
a ‘IT’, ma non funziona. Avete suggerimenti?

Se globalize insiste per usare i nomi minuscoli (scommetto che c’è di
mezzo una Symbol#to_s) e se per qualche ragione non sei obbligato ad
usarli maiuscoli (es altra applicazione che deve accedere al db) allora
potresti risolvere il problema usando le minuscole nell’enum.

Prova effettuata con mysql 5.5:

mysql> create table tabella (language enum(‘it’,‘en’));
Query OK, 0 rows affected (0.93 sec)

mysql> insert into tabella values(‘it’);
Query OK, 1 row affected (0.05 sec)

mysql> select * from tabella;
±---------+
| language |
±---------+
| it |
±---------+
1 row in set (0.00 sec)

mysql> insert into tabella values(‘IT’);
Query OK, 1 row affected (0.04 sec)

mysql> select * from tabella;
±---------+
| language |
±---------+
| it |
| it |
±---------+
2 rows in set (0.00 sec)

Paolo

Mattia nil wrote in post #1085981:

Ciao,
ho una classe così definita:

class Event < ActiveRecord::Base
translates :nome, :descrizione
# other stuff…
end

Su database ho definito la tabella di traduzione con campo locale di
tipo enum(‘IT’, ‘EN’) , come da screenshot allegata. Il problema è che
Globalize2 (Rails2) costruisce le query con campo locale in minuscolo e
non trova la corrispondenza corretta.

Questo è un esempio di query generata da Globalize2:

SELECT * FROM event_translations WHERE (event_translations.locale
IN (‘it’)) AND (event_translations.event_id = 1406)

Io vorrei diventasse così:

SELECT * FROM event_translations WHERE (event_translations.locale
IN (‘IT’)) AND (event_translations.event_id = 1406)

Ho provato a forzare da controller la variabile i18n.locale in maiuscolo
a ‘IT’, ma non funziona. Avete suggerimenti?

Purtroppo, come identificato da te, i requisiti sull’applicazione sono
di mantenere maiuscoli i valori ENUM, in quanto la tabella stessa viene
interrogata da altri servizi.

Quel tipo di soluzione è ottima, peraltro già adottata in altri casi, se
non ci fosse questa specifica.

Grazie

Se è così non ti resta che modificare la gemma.
Globalize2 probabilmente non è più sviluppata, e se è quella che vedo
qui
https://github.com/joshmh/globalize2/blob/master/lib/globalize/active_record/adapter.rb
dovresti modificare i riferimenti a locale, da e per il database,
facendone delle upcase.
Meglio se te ne fai una tua versione e la metti in vendor/plugin, che
forse era la best practice per Rails2.

Paolo