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?
on 2012-11-23 10:31
on 2012-11-24 09:47
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?
on 2012-11-24 16:27
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
on 2012-11-26 16:09
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/l... 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
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
Log in with Google account | Log in with Yahoo account
No account? Register here.
