Problema destroy

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:inmethod_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:inin_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:insend’
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:ineach’
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:indestroy_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:intransaction’
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:intransaction’
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:ineach’
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<

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” [email protected]
To: [email protected]
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/.


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?

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” [email protected]
To: [email protected]
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/.


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” [email protected]
To: [email protected]
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/.