Forum: Italian Ruby user group nuovo su ruby - problema con destroy has_and_belong_to_many

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.
A3d06794cb335cff5ceb2aced8ad535e?d=identicon&s=25 Alessandro Ale (aleee_it)
on 2009-01-11 22:10
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)
        @p.destroy
      end


L'errore che ricevo è legato a una foreing_key che ho messo su db, il
che vuol dire che
A3d06794cb335cff5ceb2aced8ad535e?d=identicon&s=25 Alessandro Ale (aleee_it)
on 2009-01-11 22:12
Alessandro Ale 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)
>         @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
A3d06794cb335cff5ceb2aced8ad535e?d=identicon&s=25 Alessandro Ale (aleee_it)
on 2009-01-12 18:38
Nessuno che mi aiuta?


Ciao
421f0a0ddf91f441710930ae777923eb?d=identicon&s=25 Roberto Casadei (robyonrails)
on 2009-01-14 13:00
Alessandro Ale 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/Ba... ).

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...

Comunque, fa riferimento a =>
http://api.rubyonrails.com/classes/ActiveRecord/As...
A3d06794cb335cff5ceb2aced8ad535e?d=identicon&s=25 Alessandro Ale (aleee_it)
on 2009-01-14 21:00
Funziona!
ho replicato l'esempio e va benissimo!

Sei un grande,
Grazie
Ciao!


Roberto Casadei wrote:
> Alessandro Ale 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/Ba... ).
>
> 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...
>
> Comunque, fa riferimento a =>
> http://api.rubyonrails.com/classes/ActiveRecord/As...
This topic is locked and can not be replied to.