Here is the command that I can execute against it (the one that I think I should *not* be able to execute.  I basically am trying to write a more complex validation that prevents deletion of a tag based on more complex criteria, but would like to first write a base before_destroy validation that causes the deletion to *always* fail no matter what.

@command = Command.find(params[:id]) 
tag = Tag.find(params[:tag_id])
@command.tags.delete(tag)

Here is the complete model for tagmapsorter:

class Tagmapsorter < ActiveRecord::Base
  belongs_to :command
  belongs_to :tag

  before_destroy :always_fail
  def always_fail
    return false
  end

end

Here is the complete model for command:

class Command < ActiveRecord::Base
  has_many :tagmapsorters
  has_many :tags, through: :tagmapsorters
  validates :text, presence: true
  validates :description, presence: true
  validates :text, uniqueness: true
  validate :has_tags?
  def has_tags?
    errors.add(:base, 'Must have at least one tag.') if self.tags.blank?
  end
end

And the complete model for Tag:

class Tag < ActiveRecord::Base
  has_many :tagmapsorters
  has_many :commands, through: :tagmapsorters
  validates :tag, presence: true
  validates :tag, uniqueness: true
end