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.


Thiago J.
http://www.railsfreaks.com

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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs