Uma Conta tem muitos Pedidos.
O que fazer quando uma Conta é apagada?
Model Conta
has_many :pedidos, :dependent => :destroy #destroy os pedidos has_many :pedidos, :dependent => :delete_all #delete os pedidos has_many :pedidos, :dependent => :nullify #null na chave estrangeira
Mas e se por acaso você não quiser deixar uma Conta ser apagada se ela possuir Pedidos registrados?
Com esse Plugin você poderá usar assim:
Model Conta
has_many :pedidos, :dependent => :restrict #nao deixa apagar
Se a Conta tiver Pedidos é levantada a exceção ActiveRecord::DestroyRestricted.
Controller Conta
def destroy
@conta.destroy
#Verifica se tem restricao (Excessao)
rescue
flash[:alert] = "Registro não pode ser excluído."
else
flash[:alert] = "Registro excluído com sucesso."
ensure
redirect_to contas_path
end
Para instalar o Plugin:
http://github.com/daviscabral/destroy_restricted/tree/master
Fonte:
http://forum.rubyonbr.org/forums/14/topics/613
Por: Elisa Pingret Valente



Eu criei uma outra forma para fazer essa válidação.
1 – adicionei o seguinte código na minha pasta LIB
module ModelsHelper
# Classe com a minha exceção
module Exceptions
class ErrorRelashionShip 0
raise ErrorRelashionShip, “O registro não pode ser removido, pois têm relacionamentos”
end
end
end
end
2 – Adicionei no método :before_remove da minha model, lembrando que funciona em has_and_belongs_to_many e has_many
has_and_belongs_to_many :users, :uniq => true, :before_remove => :restrict_delete
ou
has_many :users, :before_remove => :restrict_delete
3 – Adicionei o seguinte código no meu controller
include ModelsHelper::Exceptions
4 – Alterei o método destroy do controller
def destroy
@functionality = Functionality.find(params[:id])
@functionality.destroy
flash[:notice] = ‘Funcionalidade deletada com sucesso’
rescue ModelsHelper::Exceptions::ErrorRelashionShip => error
flash[:notice] = error.message
ensure
redirect_to(functionalities_url)
end
legal Rafael, ainda não testei… mas parece estar legal!
obrigado pela contribuição.
Ola, sabe o que pode ser este erro?!?!
Obrigado.
SyntaxError (app/controllers/a_controller.rb:472: syntax error, unexpected kRESCUE, expecting kEND
rescue
^
/app/controllers/a_controller.rb:476: syntax error, unexpected kENSURE, expecting kEND
ensure
^):
Olá Shitara!
o nome do seu controller é ‘a’?
poderia colocar mais informações, de como esta seu controller, para que eu possa entender melhor?
abraços!
Valeu pela atenção, mas vi que foi um vacilo meu hehe. coloquei a somente para exemplificar o erro.
Obrigado mesmo assim e parabéns pelo post.