Forum: Italian Ruby user group Nomi tabelle MySQL

6f3ac73806048addd708bfbd17130e81?d=identicon&s=25 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.
7b61803b3b2004d065fae748ad8d6c17?d=identicon&s=25 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
Eda3d93f49a394d603bd5ecd7c821269?d=identicon&s=25 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:
6f3ac73806048addd708bfbd17130e81?d=identicon&s=25 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)
Ff2c5ef7c7d38d18c3cd39d951cc5a07?d=identicon&s=25 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
Ff2c5ef7c7d38d18c3cd39d951cc5a07?d=identicon&s=25 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
6f3ac73806048addd708bfbd17130e81?d=identicon&s=25 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`
7b8c4392528b20b47726142f7a20c7cd?d=identicon&s=25 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
3d6e548fa413cb093009599b24ff51d6?d=identicon&s=25 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
6f3ac73806048addd708bfbd17130e81?d=identicon&s=25 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

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.