# Activerecord, id e madonne

**URL:** <https://www.ruby-forum.com/t/activerecord-id-e-madonne/75403>\
**Category:** IT\
**Created:** [November 9, 2006, 6:03pm UTC](https://www.ruby-forum.com/t/activerecord-id-e-madonne/75403 "2006-11-09T18:03:28Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![esox\_ch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/4da419/32.png) [@esox\_ch](https://www.ruby-forum.com/u/esox_ch)\
**Post date:** [November 9, 2006, 6:03pm UTC](https://www.ruby-forum.com/t/activerecord-id-e-madonne/75403/1 "2006-11-09T18:03:28Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![esox\_ch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/4da419/32.png) [@esox\_ch](https://www.ruby-forum.com/u/esox_ch)\
**Post date:** [November 9, 2006, 6:07pm UTC](https://www.ruby-forum.com/t/activerecord-id-e-madonne/75403/2 "2006-11-09T18:07:29Z")

</div>

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

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]removed\_email\_address@domain.invalid  
[2][http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
“Remember, always be yourself. Unless you suck.” - Joss Whedon

References

1. [mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
2. [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)
