Flashing Notice from a Model Throws Error

I have a view (list_users) that calls destroy_user and I'd like to get it to flash an error within the view. The code below works for the raise, but if I comment it out and try the 2 lines below it, I get the following error:

"undefined local variable or method `flash' for #<User:0x28fd3f4>"

Any ideas?

user_controller.rb:

  def destroy_user     if request.post?       user = User.find(params[:id])       user.destroy       flash[:notice] = "user has been deleted!"     end     redirect_to(:action => :list_users)   end

user.rb (model):

def after_destroy     if User.count.zero?       raise "Can't delete the last user"       # I'd like it to do this, but can't seem to make it work:       # flash.now[:notice] = "Can't remove the last user"       # redirect_to(:action => "list_users")     end   end

Flashs don't work on models, only passing from the controllers to the views. You may wanna rethink your logic.

Ah OK thanks

wickNbomb wrote:

"undefined local variable or method `flash' for #<User:0x28fd3f4>"

As has been pointed out, the "flash" is related to the HTTP session and models should work independently of this so models cannot access flash, session, etc.

      user.destroy

Check the result of the destroy. If your exception was raised, then the destroy will fail. You can catch that here and update the flash accordingly.