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 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 ;)