# Problema destroy

**URL:** <https://www.ruby-forum.com/t/problema-destroy/83863>\
**Category:** IT\
**Created:** [January 30, 2007, 10:49am UTC](https://www.ruby-forum.com/t/problema-destroy/83863 "2007-01-30T10:49:07Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![mschwab](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/59ef9b/32.png) [@mschwab](https://www.ruby-forum.com/u/mschwab)\
**Post date:** [January 30, 2007, 10:49am UTC](https://www.ruby-forum.com/t/problema-destroy/83863/1 "2007-01-30T10:49:07Z")

</div>

Vorrei cancellare alcuni record come segue:

Port.find\_all\_by\_subsystem\_id(@subsystem.id).each do |p|  
logger.info("\*\*\* porta #{p.id}")  
p.destroy  
end

ma ottengo il seguente errore:

NoMethodError: undefined method `position' for #<Port:0xb7b008bc> from /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1792:in`method\_missing’  
from  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active\_record/acts/list.rb:155:in  
`send' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/acts/list.rb:155:in`in\_list?’  
from  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active\_record/acts/list.rb:117:in  
`remove_from_list' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:344:in`send’  
from  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active\_record/callbacks.rb:344:in  
`callback' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:341:in`each’  
from  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active\_record/callbacks.rb:341:in  
`callback' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:333:in`destroy\_without\_transactions’  
from  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active\_record/transactions.rb:122:in  
`destroy' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/abstract/database_statements.rb:51:in`transaction’  
from  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active\_record/transactions.rb:91:in  
`transaction' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/transactions.rb:118:in`transaction’  
from  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active\_record/transactions.rb:122:in  
`destroy' from (irb):2 from (irb):1:in`each’  
from (irb):1\>\>

Nonostante il messaggio di errore il primo record e’ stato cancellato.

Premesso che la stessa query funziona su altre tabelle e che penso ci  
sia un modo piu’ elegante e rubysh per eseguire lo stesso comando… non  
capisco perche’ non funzioni. Avete qualche idea?  
Grazie mille!

> M\<

---

<div class="post-metadata">

**Author:** ![mschwab](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/59ef9b/32.png) [@mschwab](https://www.ruby-forum.com/u/mschwab)\
**Post date:** [January 30, 2007, 11:00am UTC](https://www.ruby-forum.com/t/problema-destroy/83863/2 "2007-01-30T11:00:36Z")

</div>

a occhio e croce sembra giusta, se ti cancella il primo record e se  
funziona  
negli altri suppongo che ci sia qualche problema nel db, hai controllato  
che  
non ci siano incoerenze nella tabella Port?

Saluti Andrea

----- Original Message -----  
From: “Mike Schirru” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Sent: Tuesday, January 30, 2007 10:49 AM  
Subject: [ruby-it] Problema destroy

> from  
> `remove\_from\_list’  
> /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active\_record/callbacks.rb:341:in  
> from  
> from (irb):1\>\>  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

* * *

---

<div class="post-metadata">

**Author:** ![mschwab](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/59ef9b/32.png) [@mschwab](https://www.ruby-forum.com/u/mschwab)\
**Post date:** [January 30, 2007, 11:12am UTC](https://www.ruby-forum.com/t/problema-destroy/83863/3 "2007-01-30T11:12:39Z")

</div>

On Jan 30, 2007, at 10:49 AM, Mike Schirru wrote:

> Vorrei cancellare alcuni record come segue:
> 
> Port.find\_all\_by\_subsystem\_id(@subsystem.id).each do |p|  
> logger.info("\*\*\* porta #{p.id}")  
> p.destroy  
> end

Port.destroy\_all([‘subsystem\_id = ?’, @subsystem.id])

> ma ottengo il seguente errore:
> 
> NoMethodError: undefined method `position’ for #Port:0xb7b008bc

Per caso hai un acts\_as\_list nel tuo modello?

---

<div class="post-metadata">

**Author:** ![mschwab](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/59ef9b/32.png) [@mschwab](https://www.ruby-forum.com/u/mschwab)\
**Post date:** [January 30, 2007, 11:16am UTC](https://www.ruby-forum.com/t/problema-destroy/83863/4 "2007-01-30T11:16:50Z")

</div>

Ho pensato anche io a questa ipotesi, perche’ ho modificato tramite SQL  
il valore di un campo per tutti i record… pero’ questa operazione  
dovrebbe essere trasparente per il modello ActiveRecord.

Dal log sembra che dopo la cancellazione cerchi di effettuare un  
rollback forse proprio a causa di una inconsistenza:

Port Columns (0.003366) SHOW FIELDS FROM ports  
Port Load (0.000432) SELECT \* FROM ports WHERE (ports.`subsystem_id`  
= 4 )  
SQL (0.003651) BEGIN  
Port Destroy (0.000185) DELETE FROM ports  
WHERE id = 13

SQL (0.000053) ROLLBACK

NoMethodError (undefined method `position’ for #Port:0xb7a74da8):

stb wrote:

> a occhio e croce sembra giusta, se ti cancella il primo record e se  
> funziona  
> negli altri suppongo che ci sia qualche problema nel db, hai controllato  
> che  
> non ci siano incoerenze nella tabella Port?
> 
> Saluti Andrea
> 
> ----- Original Message -----  
> From: “Mike Schirru” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> Sent: Tuesday, January 30, 2007 10:49 AM  
> Subject: [ruby-it] Problema destroy
> 
> > from  
> > `remove\_from\_list’  
> > /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active\_record/callbacks.rb:341:in  
> > from  
> > from (irb):1\>\>  
> > Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
> 
> * * *

---

<div class="post-metadata">

**Author:** ![mschwab](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/59ef9b/32.png) [@mschwab](https://www.ruby-forum.com/u/mschwab)\
**Post date:** [January 30, 2007, 3:53pm UTC](https://www.ruby-forum.com/t/problema-destroy/83863/5 "2007-01-30T15:53:40Z")

</div>

Pare che il problema fosse dovuto alla definizione

acts\_as\_list :scope =\> :subsystem\_id

nel modello della tabella Port.

Grazie comunque!

Mike Schirru wrote:

> Ho pensato anche io a questa ipotesi, perche’ ho modificato tramite SQL  
> il valore di un campo per tutti i record… pero’ questa operazione  
> dovrebbe essere trasparente per il modello ActiveRecord.
> 
> Dal log sembra che dopo la cancellazione cerchi di effettuare un  
> rollback forse proprio a causa di una inconsistenza:
> 
> Port Columns (0.003366) SHOW FIELDS FROM ports  
> Port Load (0.000432) SELECT \* FROM ports WHERE (ports.`subsystem_id`  
> = 4 )  
> SQL (0.003651) BEGIN  
> Port Destroy (0.000185) DELETE FROM ports  
> WHERE id = 13
> 
> SQL (0.000053) ROLLBACK
> 
> NoMethodError (undefined method `position’ for #Port:0xb7a74da8):
> 
> stb wrote:
> 
> > a occhio e croce sembra giusta, se ti cancella il primo record e se  
> > funziona  
> > negli altri suppongo che ci sia qualche problema nel db, hai controllato  
> > che  
> > non ci siano incoerenze nella tabella Port?
> > 
> > Saluti Andrea
> > 
> > ----- Original Message -----  
> > From: “Mike Schirru” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> > To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> > Sent: Tuesday, January 30, 2007 10:49 AM  
> > Subject: [ruby-it] Problema destroy
> > 
> > > from  
> > > `remove\_from\_list’  
> > > /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active\_record/callbacks.rb:341:in  
> > > from  
> > > from (irb):1\>\>  
> > > Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
