Rimuovere assosiation invece di distruggere oggetto quando: allow_destroy => true
-
18-09-2019 - |
Domanda
Quando si utilizza la nuova accepts_nested_attributes_for
in ActiveRecord, è possibile utilizzare l'opzione :allow_destroy => true
. Quando questa opzione è impostata, qualsiasi hash contenente attributi come {"_delete"=>"1", "id"=>"..."}
passato a update_attributes
cancellerà l'oggetto nidificato nidificato.
configurazione semplice:
class Forum < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users, :allow_destroy => true
end
class User < ActiveRecord::Base
belongs_to :forum
end
Forum.first.update_attributes("users_attributes"=>{"0"=>{"_delete"=>"1", "id"=>"42"}})
Domanda: Come faccio - invece di eliminare gli oggetti nidificati quando "_delete" => "1"
- basta rimuovere l'associazione? (Cioè Nel caso precedente impostare il forum_id sull'utente a zero)
Domanda bonus: Che cosa succede se anche io voglio cambiare l'un attributo sull'oggetto nidificato quando si rimuove l'associazione? (Ad esempio come impostare uno stato o un timestamp)
Soluzione
Invece di chiedere per l'utente da cancellare con "_delete" => '1'
, si può non solo aggiornare utilizzando le nested_attributes:?
Forum.first.update_attributes("users_attributes"=> {
"0" => {
"id" => "42",
"forum_id" => "",
"state" => 'removed'
}
})