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)

È stato utile?

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'
  }
})
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top