Nuovo su ruby - problema con destroy has_and_belong_to_many


#1

Ciao, prima volta che scrivo, e sto un po’ studiando questo linguaggio,
quindi scusate in anticipo se la domanda fosse banale (ma non sono
riuscito a trovare risposta)
Il problema è questo, io ho 2 modelli che sono legati fra di loro da una
relazione many-to-many, e ho utilizzato la relazione
has_and_belong_to_many,
ho seguito tutto da manuale:

class Picture < ActiveRecord::Base
has_and_belongs_to_many :users
end

class User < ActiveRecord::Base
has_and_belongs_to_many :pictures
end

tabella di relazione

def self.up
create_table :pictures_users, :id => false, :primary_key
=>{‘user_id’, ‘picture_id’} do |t|
t.integer :picture_id
t.integer :user_id
end
end

funziona benissimo eccetto che se provo a eliminare un record di un
modello va in errore.

def remove_picture
@pictures = params[:selected_id]
@pictures.each do |p|
@p = Picture.find§
@p.destroy
end

L’errore che ricevo è legato a una foreing_key che ho messo su db, il
che vuol dire che


#2

Alessandro A. wrote:

Ciao, prima volta che scrivo, e sto un po’ studiando questo linguaggio,
quindi scusate in anticipo se la domanda fosse banale (ma non sono
riuscito a trovare risposta)
Il problema è questo, io ho 2 modelli che sono legati fra di loro da una
relazione many-to-many, e ho utilizzato la relazione
has_and_belong_to_many,
ho seguito tutto da manuale:

class Picture < ActiveRecord::Base
has_and_belongs_to_many :users
end

class User < ActiveRecord::Base
has_and_belongs_to_many :pictures
end

tabella di relazione

def self.up
create_table :pictures_users, :id => false, :primary_key
=>{‘user_id’, ‘picture_id’} do |t|
t.integer :picture_id
t.integer :user_id
end
end

funziona benissimo eccetto che se provo a eliminare un record di un
modello va in errore.

def remove_picture
@pictures = params[:selected_id]
@pictures.each do |p|
@p = Picture.find§
@p.destroy
end

L’errore che ricevo è legato a una foreing_key che ho messo su db, il
che vuol dire che

partito lìinvio per sbaglio…
dicevo l’errore è legato al fatto che con la destroy non rimuove il
record nella tabella di relazione.

Come posso fare?

Grazie, ciao
Alessandro


#3

Alessandro A. wrote:

Nessuno che mi aiuta?

Ciao

Giustamente delete() tenta di eliminare il record relativamente alla
tabella a cui il receiver appartiene (
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002031 ).

Sostanzialmente devi ottenere un’istanza della tabella associazione,
cioè un record di tale tabella, e chiamare delete su di esso.

Qui c’è un esempio di come fare:
http://www.neyric.com/blog/how-to-delete-a-many-to-many-association-with-rails

Comunque, fa riferimento a =>
http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html#M001602


#4

Funziona!
ho replicato l’esempio e va benissimo!

Sei un grande,
Grazie
Ciao!

Roberto C. wrote:

Alessandro A. wrote:

Nessuno che mi aiuta?

Ciao

Giustamente delete() tenta di eliminare il record relativamente alla
tabella a cui il receiver appartiene (
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002031 ).

Sostanzialmente devi ottenere un’istanza della tabella associazione,
cioè un record di tale tabella, e chiamare delete su di esso.

Qui c’è un esempio di come fare:
http://www.neyric.com/blog/how-to-delete-a-many-to-many-association-with-rails

Comunque, fa riferimento a =>
http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html#M001602


#5

Nessuno che mi aiuta?

Ciao