class Closet < ActiveRecord::Base belongs_to :floor validates_associated :floor has_many :switches validates_presence_of :number validates_uniqueness_of :number, :scope => 'floor_id', :if => Proc.new { |closet| !closet.floor.rooms.select{|r| r.number.eql?(closet.number) }.any? }, :message => 'already exists on this floor' validates_length_of :number, :maximum => 10 before_destroy 'return false unless self.switches.length == 0' PS: I know rooms/closets are similar, but they are different enough that my newb DB skills didn't want to do single table inheritance ;)