Activerecord, id e madonne

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

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

  2. 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…
:slight_smile:
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

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

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

  1. mailto:[email protected]
  2. http://lists.ruby-it.org/mailman/listinfo/ml