Forum: Italian Ruby user group i campi id, relativi alle primary keys non si possono cancellare?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
B0f6d8efcf671ea3163449e231264cc4?d=identicon&s=25 Mauro (Guest)
on 2009-02-11 22:24
(Received via mailing list)
Es. ho un record con id=>1 e un altro con id=>2.
Se faccio un Class.delete(2) o anche un Class.destroy(2) (non mi
chiara la differenza tra i due) e poi inserisco un altro record noto
che gli viene assegnato id=>3.
E il 2 che fine ha fatto?
36f352bc8c234dbde21cb30e89767824?d=identicon&s=25 Luigi Panzeri (Guest)
on 2009-02-11 22:59
(Received via mailing list)
Il giorno 11/feb/09, alle ore 22:23, Mauro ha scritto:

> Es. ho un record con id=>1 e un altro con id=>2.
> Se faccio un Class.delete(2) o anche un Class.destroy(2) (non mi
> chiara la differenza tra i due) e poi inserisco un altro record noto
> che gli viene assegnato id=>3.
> E il 2 che fine ha fatto?
>

E` stato cancellato non era quello che volevi?

Le primary key sono di default numeri autoincrementali. Ovvero ogni
nuovo oggetto e` associato ad una row nel db identificata da un
numero intero che appunto e` assegnato in automatico come (numero
precedente + 1).

Ci sono molti buoni motivi per avere questo schema ma se ti da
fastidio puoi scegliere la primary key come preferisci. Lo schema
precedente garantisce l'unicita' (anche in presenza di query
parallele), ovviamente il tuo custom deve fare lo stesso.

Per farlo definisci un metodo before_create dove fai   self.id = id
secondo le tue preferenze


Per quanto riguarda la differenza tra delete e destroy.

ri ActiveRecord::Base::delete


delete(id)
Delete an object (or multiple objects) where the +id+ given matches
      the primary_key. A SQL +DELETE+ command is executed on the
database
      which means that no callbacks are fired off running this. This is
      an efficient method of deleting records that don't need
cleaning up
      after or other actions to be taken

Quindi delete e` associato ad un comando SQL DELETE


ri ActiveRecord::Base#destroy

Destroy an object (or multiple objects) that has the given id, the
      object is instantiated first, therefore all callbacks and filters
      are fired off before the object is deleted. This method is less
      efficient than ActiveRecord#delete but allows cleanup methods and
      other actions to be run.

      This essentially finds the object (or multiple objects) with the
      given id, creates a new object from the attributes, and then calls
      destroy on it.


Quindi destroy e` associato all'ORM, ovvero viene ricercata la riga
corrispondente all'id, instanziata una instanza della classe Ruby
associata a tale riga, e chiamato il delete su di esso. Meno
efficiente ma permette di usare tutta la infrastruttura OO di Rails.
This topic is locked and can not be replied to.