[ruby-it] Destroy di un record
Paolo Montrasio
paolo a paolomontrasio.com
Ven 11 Dic 2009 09:07:20 CET
Premessa: non ho fatto prove con il codice e quindi la disamina
successiva è soggetta a bug anche grossi, tuttavia...
Lorenzo Caniato wrote:
> def destroy
> @album = Album.find(params[:id])
> Album.find(:first, :conditions => ["album_id = ?",
> params[:id]]).destroy
> @album.destroy
>
> ........
> end
Mi pare strano che la tabella albums abbia un attributo album_id.
Rimanda a sé stessa? Mi sarei atteso download_id.
Il problema in realtà si capisce guardando il codice dei due modelli.
Cito
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#M001834
> class Album < ActiveRecord::Base
> has_one :download, :dependent => :destroy
has_one: "This method should only be used if the other class contains
the foreign key. If the current class contains the foreign key, then you
should use belongs_to instead."
Quindi albums non conterrà nessuna foreign key: né album_id (ovvio) né
download_id.
> ..........
> end
>
> class Download < ActiveRecord::Base
> belongs_to :album
Quindi downloads dovrà avere un attributo album_id
Se invece vuoi che albums abbia download_id dovrai mettere
belongs_to :download, :dependent => :destroy
in album.rb e
has_one :album
in download.rb. Che sia l'album ad appartenere (belongs_to) al download
mi sembra poco naturale da leggere per cui lascerei le cose come sono
nei modelli correggendo solo gli attributi nelle tabelle.
La dependent destroy probabilissimamente non funzionava perché attributi
e associazioni erano in contraddizione. Una volta corretti nel
controller dovrebbe bastare
@album = Album.find(params[:id])
@album.destroy
Paolo
> ..........
> end
--
Posted via http://www.ruby-forum.com/.
More information about the Ml
mailing list