Pergunta

Ao usar o novo accepts_nested_attributes_for em ActiveRecord, é possível usar o :allow_destroy => true opção. Quando esta opção for definida, qualquer de hash que contém atributos aninhados como {"_delete"=>"1", "id"=>"..."} passado para update_attributes irá excluir o objeto aninhado.

A configuração simples:

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"}})

Pergunta: Como eu - em vez de excluir os objetos aninhados quando "_delete" => "1" - basta remover a associação? (Isto é, no caso acima definido o forum_id em que o utilizador nil)

Bonus pergunta: E se eu também quero mudar a um atributo no objeto aninhado ao remover a associação? (Por exemplo, como o ajuste de um estado ou de um timestamp)

Foi útil?

Solução

Em vez de pedir para o usuário a ser excluído usando "_delete" => '1', você pode não apenas atualizá-lo usando as nested_attributes:?

Forum.first.update_attributes("users_attributes"=> { 
  "0" => {
    "id" => "42",
    "forum_id" => "",
    "state" => 'removed'
  }
})
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top