before_destroy and sessions

Models don't have access to the session, so session[:user_id] is nil.

Sessions are a controller thing. One way I've seen this work is this:

1. Add a 'current_user' class property to your User model
2. Create a before_filter that sets this to the session[:user] on every
request (not just at login)
3. In your model code, use 'User.current_user' instead of session[:user]

I wouldn't even take the callback/filter route. I'd simply define my
own method, destroy_as:

<code>
class SomeModel < ActiveRecord::Base
  def destroy_as(user)
    return false unless self.user == user
    destroy
  end
end

# now the controller - presumably you
# have access to the user object, not just
# the id - i usually instantiate a user from
# an id in the session using a before_filter

def destroy
  @obj = SomeModel.find(params[:id]
  if @obj.destroy_as(@current_user)
    flash[:notice] = 'It worked!'
  else
    flash[:error] = 'It didnt work!'
  end
end

Hope that helps. You could alternatively just pass in the user ID to
destroy_as and do the comparison that way but I think this is more
intention revealing.