Forum: Italian Ruby user group Nomi tabelle MySQL

Posted by Enrico Venturini (enricov)
on 2012-05-14 14:02
Ciao a tutti,
ho la necessità di interfacciare un database MySQL con Rails, le tabelle
del db sono tutte maiuscole (ad esempio BS_TODO_ABC_XYZ), qualcuno ha
mai affrontato un problema simile? Ho cercato in rete ma non ho trovato
molto.
Grazie, ciao.
Posted by Alessandro Mencarini (Guest)
on 2012-05-14 14:13
(Received via mailing list)
On 14 May, 2012, at 14:02, Enrico Venturini wrote:

> Ciao a tutti,
> ho la necessit di interfacciare un database MySQL con Rails, le tabelle
> del db sono tutte maiuscole (ad esempio BS_TODO_ABC_XYZ), qualcuno ha
> mai affrontato un problema simile? Ho cercato in rete ma non ho trovato
> molto.

In environment.rb puoi mettere

config.active_record.table_name_prefix = "BS_"

Poi nei vari modelli:

class Todo < ActiveRecord::Base
  self.table_name = "TODO_ABC_XYZ"
end

Fammi sapere se la cosa fa al caso tuo :)

--
Alessandro Mencarini
freegoweb.it
Posted by Andrea Pavoni (apeacox)
on 2012-05-14 14:17
(Received via mailing list)
il metodo pi rapido  usare "table_name=":

TuoModel < ActiveRecord::Base

   self.table_name = "NOME_CUSTOM"

end

ciao,
A.


Il 14/05/2012 14:02, Enrico Venturini ha scritto:
Posted by Enrico Venturini (enricov)
on 2012-05-14 14:38
Alessandro Mencarini wrote in post #1060661:
> On 14 May, 2012, at 14:02, Enrico Venturini wrote:
>
>> Ciao a tutti,
>> ho la necessit di interfacciare un database MySQL con Rails, le tabelle
>> del db sono tutte maiuscole (ad esempio BS_TODO_ABC_XYZ), qualcuno ha
>> mai affrontato un problema simile? Ho cercato in rete ma non ho trovato
>> molto.
>
> In environment.rb puoi mettere
>
> config.active_record.table_name_prefix = "BS_"
>
> Poi nei vari modelli:
>
> class Todo < ActiveRecord::Base
>   self.table_name = "TODO_ABC_XYZ"
> end
>
> Fammi sapere se la cosa fa al caso tuo :)
>
> --
> Alessandro Mencarini
> freegoweb.it




Ciao,
innanzitutto vi ringrazio per il suggerimento, ma avevo già trovato e 
provato una soluzione simile senza successo.
Comunque ho effettuato nuovamente il test come di seguito descritto:

Nel model:
class BsTolodslRTrABatmaf < ActiveRecord::Base
  self.table_name = "BS_TOLODSL_R_TR_A_BATMAF"
end


Nel controller:
@test = BsTolodslRTrABatmaf.find(:all)


Il risultato:
Mysql::Error: Table 'CRMWS.bs_tolodsl_r_tr_a_batmaf' doesn't exist: 
SELECT * FROM `bs_tolodsl_r_tr_a_batmaf`

(...mentre esiste la tabella BS_TOLODSL_R_TR_A_BATMAF)
Posted by Stefano Pigozzi (Guest)
on 2012-05-14 14:55
(Received via mailing list)
2012/5/14 Enrico Venturini <enrico.venturini@gmail.com>

>
> Nel model:
> class BsTolodslRTrABatmaf < ActiveRecord::Base
>  self.table_name = "BS_TOLODSL_R_TR_A_BATMAF"
> end
>

hai provato a fare l'override di table_name?
http://apidock.com/rails/ActiveRecord/Base/table_name/class

class BsTolodslRTrABatmaf < ActiveRecord::Base
  def table_name
     "TOLODSL_R_TR_A_BATMAF"
  end
end

Sulla documentazione dice che di solito viene forzato a lower case: da 
un
breve giro sui sorgenti sembra l'implementazione di table_name chiami
attraverso altri metodi undecorated_table_name e questo chiama 
#underscore
sulla stringa che contiene il nome della tabella.

Facendo l'override in teoria non dovrebbe accadere. Eventualmente puoi
pensare di mettere l'override in un mixin che fa l'upcase del super se 
il
nome rimane comunque standard.

Ciao
Stefano
Posted by Stefano Pigozzi (Guest)
on 2012-05-14 14:56
(Received via mailing list)
>
> class BsTolodslRTrABatmaf < ActiveRecord::Base
>   def table_name
>      "TOLODSL_R_TR_A_BATMAF"
>   end
> end
>

Scusate, ho ovviamente tralasciato il `self.` davanti allo snippet
Posted by Enrico Venturini (enricov)
on 2012-05-14 15:01
Stefano Pigozzi wrote in post #1060673:
>>
>> class BsTolodslRTrABatmaf < ActiveRecord::Base
>>   def table_name
>>      "TOLODSL_R_TR_A_BATMAF"
>>   end
>> end
>>
>
> Scusate, ho ovviamente tralasciato il `self.` davanti allo snippet



Ciao,
purtroppo il risultato è analogo

Nel model:
class BsTolodslRTrABatmaf < ActiveRecord::Base
  def self.table_name
     "BS_TOLODSL_R_TR_A_BATMAF"
  end
end

Il risultato:
Mysql::Error: Table 'CRMWS.bs_tolodsl_r_tr_a_batmaf' doesn't exist: 
SELECT * FROM `bs_tolodsl_r_tr_a_batmaf`
Posted by Nicholas Wieland (Guest)
on 2012-05-14 15:17
(Received via mailing list)
On May 14, 2012, at 2:54 PM, Stefano Pigozzi wrote:

> http://apidock.com/rails/ActiveRecord/Base/table_name/class
>
> class BsTolodslRTrABatmaf < ActiveRecord::Base

:-(

Non riesci a rinominarle in una migrazione 'ste tabelle ?

Magari ti sono utili questi:
http://www.slideshare.net/napcs/rails-and-legacy-d...
http://jonathanhui.com/ruby-rails-3-model-working-...

  ngw

--
[ 926381, 23200231779, 1299022, 1045307475 ].collect { |a| a.to_s( 36 ) 
}.join( " " )
Nicholas Wieland (ngw)
ngw@nofeed.org
http://nofeed.org
Posted by Duilio Ruggiero (sinetris)
on 2012-05-14 15:20
Enrico Venturini wrote in post #1060675:

> Ciao,
> purtroppo il risultato è analogo
>
> Nel model:
> class BsTolodslRTrABatmaf < ActiveRecord::Base
>   def self.table_name
>      "BS_TOLODSL_R_TR_A_BATMAF"
>   end
> end
>
> Il risultato:
> Mysql::Error: Table 'CRMWS.bs_tolodsl_r_tr_a_batmaf' doesn't exist:
> SELECT * FROM `bs_tolodsl_r_tr_a_batmaf`

Ciao,
prova:

class BsTolodslRTrABatmaf < ActiveRecord::Base
  set_table_name 'BS_TOLODSL_R_TR_A_BATMAF'
end

Se non dovesse funzionare, prova ad aggiornare RoR all'ultima versione.
(3.2.3 se usi Rails 3 oppure 2.3.14 se usi Rails 2)

Oppure indica la versione che stai usando ;)


--
Duilio Ruggiero
http://sinetris.info
Posted by Enrico Venturini (enricov)
on 2012-05-15 15:49
Duilio Ruggiero wrote in post #1060680:
> Enrico Venturini wrote in post #1060675:
>
>> Ciao,
>> purtroppo il risultato è analogo
>>
>> Nel model:
>> class BsTolodslRTrABatmaf < ActiveRecord::Base
>>   def self.table_name
>>      "BS_TOLODSL_R_TR_A_BATMAF"
>>   end
>> end
>>
>> Il risultato:
>> Mysql::Error: Table 'CRMWS.bs_tolodsl_r_tr_a_batmaf' doesn't exist:
>> SELECT * FROM `bs_tolodsl_r_tr_a_batmaf`
>
> Ciao,
> prova:
>
> class BsTolodslRTrABatmaf < ActiveRecord::Base
>   set_table_name 'BS_TOLODSL_R_TR_A_BATMAF'
> end
>
> Se non dovesse funzionare, prova ad aggiornare RoR all'ultima versione.
> (3.2.3 se usi Rails 3 oppure 2.3.14 se usi Rails 2)
>
> Oppure indica la versione che stai usando ;)
>
>
> --
> Duilio Ruggiero
> http://sinetris.info




Ciao,
ho risolto il problema aggiornando rails alla versione 3.2.3
ora posso utilizzare set_table_name con successo.

grazie.
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.