Nomi tabelle MySQL

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.

On 14 May, 2012, at 14:02, Enrico V. 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 :slight_smile:


Alessandro M.
freegoweb.it

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 V. ha scritto:

Alessandro M. wrote in post #1060661:

On 14 May, 2012, at 14:02, Enrico V. 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 :slight_smile:


Alessandro M.
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)

class BsTolodslRTrABatmaf < ActiveRecord::Base
def table_name
“TOLODSL_R_TR_A_BATMAF”
end
end

Scusate, ho ovviamente tralasciato il self. davanti allo snippet

Stefano P. 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

2012/5/14 Enrico V. [email protected]

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

On May 14, 2012, at 2:54 PM, Stefano P. wrote:

table_name (ActiveRecord::Base) - APIdock

class BsTolodslRTrABatmaf < ActiveRecord::Base

:frowning:

Non riesci a rinominarle in una migrazione 'ste tabelle ?

Magari ti sono utili questi:

http://jonathanhui.com/ruby-rails-3-model-working-legacy-database

ngw


[ 926381, 23200231779, 1299022, 1045307475 ].collect { |a| a.to_s( 36 )
}.join( " " )
Nicholas W. (ngw)
[email protected]

Duilio R. wrote in post #1060680:

Enrico V. 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 :wink:


Duilio R.
http://sinetris.info

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

grazie.

Enrico V. 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 :wink:


Duilio R.
http://sinetris.info