Tratando :dependent => :restrict No Rails

Recentemente me veio uma dúvida referênte ao :dependent do Rails, pois eu não queria que um objeto fosse deletado se estivesse associado a outro, então teria que usar assim :dependent => :restrict. Até aqui tudo bem, mas quando eu tentava deletar um objeto associado, sempre gerava uma exception e a página não ficava no layout padrão da app. Bem ainda tranquilo fui até o ApplicationController e adicionei o seguinte código:

1
2
3
4
5
6
7
8
class ApplicationController < ActionController::Base
  protect_from_forgery

  rescue_from ActiveRecord::DeleteRestrictionError do |exception|
      redirect_to root_url, :alert => exception.message
  end

end

Só que ao deletar um objeto sempre redirecionava para a home da aplicação, e não era isso exatamente que eu queria, tinha que ficar na página que estava deletando o objeto, pensei um pouco tentei passar o nome do controller mais ou menos assim:

1
2
3
4
5
6
7
8
9
10
class ApplicationController < ActionController::Base
  protect_from_forgery

  rescue_from ActiveRecord::DeleteRestrictionError do |exception|
      redirect_to controller_name_url, :alert => exception.message
      #ou
      redirect_to "#{controller_name}"_url, :alert => exception.message
  end

end

Sempre aparecia um erro.

Então me veio aquela velha luz, lol, o código acabou desse modo:

1
2
3
4
5
6
7
8
class ApplicationController < ActionController::Base
  protect_from_forgery

  rescue_from ActiveRecord::DeleteRestrictionError do |exception|
      redirect_to :back, :alert => exception.message
  end

end

Provavelmente exista uma outra forma de fazer, mas essa ficou bem simples, e resolveu lol.

Comments