I seem to have trouble handling error messages. Here’s my method:
def destroy
@user = User.find(current_user)
@authorization = Authorization.find(params[:id])
if @user.authorizations.count > 1
@authorization.destroy
redirect_to(user_path(current_user))
else
...
end
end
I don’t want a user to delete their last authorization (say, Facebook) because then the user won’t have any authorizations associated with it and the account is lost. I want to send an error message that says why the destroy method fails, but I’m just not sure how. Everything I’ve tried just doesn’t work.
I’ve tried things like @user.errors.add => “error message”
But it just shows up blank. I think my problem is with using render. If I try, for example:
respond_to do |format|
@user.errors[:base] << "Sorry, you can't delete your only authorized service."
format.html render :template => "users/show"
end
I get a problem because rails starts looking for the partials in users/show inside the authorizations directory for some reason, presumably because I’m calling the authorizations controller from a users view.
Here’s how I display the flash in my views:
def show_flash
[:notice, :errors, :alert].collect do |key|
msg = (flash[key].to_s + " (close)")
content_tag(:div, (content_tag(:a, msg, :class => "#{key}", :href => "#", :onclick => "$('messages').slideUp(); return false;")), :id => key, :class => "flash_#{key}") unless flash[key].blank?
end.join
end
I can get notices to appear just fine.
So, this seems to be working:
But, this does not: