ciao a tutti
sto usando activerecord con ruby e MSSQL su una tabella che ha come
campo primary key/identity un campo che non si chiama ID ma “contatore”
(e non posso cambiarlo)
quando faccio record.update AR toppa la query per 2 motivi
-
la query nella WHERE usa il campo “ID” e non “contatore”, quindi mi
ritrovo un bel " …WHERE contatore = NULL". ho risolto questo problema
con un rozzissimo record.id = record.contatore
-
il campo “contatore” mi finisce nella collezione Attributes, e di
conseguenza finisce nella query di update, dove ovviamente MSSQL si
incazza perché cerco di aggiornare esplicitamente un campo identity
ho provato ad eliminare “contatore” con un
record.attributes.delete(“contatore”) ma niente, non riesco a rimuoverlo
dall’hash e conseguentemente dalla query di update… ma possibile che
ci sia un bug cosi grosso su AR? che non si possano fare update su
tabelle che hanno la primary key/identity diversa da “id” ? non
è possibile mi dico, per me sto sbagliando qualcosa…
…cosa? qualcuno è in grado di aiutarmi?
jeko
p.s. questo è il codice
class Risorsa < ActiveRecord::Base
belongs_to :tipo_risorsa, :foreign_key => “Contatore_Tipi_Risorse”
set_primary_key “contatore”
set_table_name “risorse”
end
risorse = Risorsa.find(:all)
risorse.each do |risorsa|
[…]
risorsa.id = risorsa.Contatore #per correggere il bug al punto 1
risorsa.qualcosa = “myvalue”
risorsa.save #ho provato anche .update
end
Quandi crei il model usi “set_primary_key”.
Così: class Centre < ActiveRecord::Base
# COD_PART is primary key
set_table_name :tbcentri
set_primary_key :cod_part
has_many :plants, :foreign_key => :cod_part
belongs_to :comune, :foreign_key =>
:cod_comune
belongs_to :street, :foreign_key => :cod_strada
end
Se poi hai bisogno anche di primary key su più colonne ti consiglio di
usare “composite_primary_key” che è un ottimo gem…

Stefano G. wrote:
ciao a tutti
sto usando activerecord con ruby e MSSQL su una tabella che ha come
campo prima
ry key/identity un campo che non si chiama ID ma “contatore” (e non
posso cambi
arlo)
quando faccio record.update AR toppa la query per 2 motivi
-
la query nella WHERE usa il campo “ID” e non “contatore”, quindi mi
ritrovo
un bel " …WHERE contatore = NULL". ho risolto questo problema con un
rozziss
imo record.id = record.contatore
-
il campo “contatore” mi finisce nella collezione Attributes, e di
conseguenz
a finisce nella query di update, dove ovviamente MSSQL si incazza
perché cerco
di aggiornare esplicitamente un campo identity
ho provato ad eliminare “contatore” con un
record.attributes.delete(“contatore”
) ma niente, non riesco a rimuoverlo dall’hash e conseguentemente dalla
query d
i update… ma possibile che ci sia un bug cosi grosso su AR? che non si
possan
o fare update su tabelle che hanno la primary key/identity diversa da
“id” ? no
n è possibile mi dico, per me sto sbagliando qualcosa…
…cosa? qualcuno è in grado di aiutarmi?
jeko
p.s. questo è il codice
class Risorsa < ActiveRecord::Base
belongs_to :tipo_risorsa, :foreign_key => “Contatore_Tipi_Risorse”
set_primary_key “contatore”
set_table_name “risorse”
end
risorse = Risorsa.find(:all)
risorse.each do |risorsa|
[…]
risorsa.id = risorsa.Contatore #per correggere il bug al punto 1
risorsa.qualcosa = “myvalue”
risorsa.save #ho provato anche .update
end
Ml mailing list
[1][email protected]
[2]http://lists.ruby-it.org/mailman/listinfo/ml
–
“Remember, always be yourself. Unless you suck.” - Joss Whedon
References
- mailto:[email protected]
- http://lists.ruby-it.org/mailman/listinfo/ml